home *** CD-ROM | disk | FTP | other *** search
/ 60 Years Brother 1954 - 2014 / 60thBook.bin / BROTHER 60th CD / Brother_60th_Anniversary_flip book for PC.exe / html5pc.js < prev    next >
Text File  |  2014-02-09  |  257KB  |  7,231 lines

  1. var $estr = function() { return js.Boot.__string_rec(this,''); };
  2. function $extend(from, fields) {
  3.     function inherit() {}; inherit.prototype = from; var proto = new inherit();
  4.     for (var name in fields) proto[name] = fields[name];
  5.     return proto;
  6. }
  7. var CData = function() {
  8. };
  9. CData.__name__ = true;
  10. CData.prototype = {
  11.     __class__: CData
  12. }
  13. var FlipBook = function() {
  14.     this.isMoveNote = false;
  15.     this.currentOrgY = 0;
  16.     this.currentOrgX = 0;
  17.     this.moveDY = 0;
  18.     this.moveDX = 0;
  19.     this.zoomLevel = 1;
  20.     this.zoomCSS = "";
  21.     this.bAbortMouseDown = false;
  22.     this.bCanGestureZoom = true;
  23.     this.bStartNoteGesture = false;
  24.     this.currentNote = null;
  25.     this.bStartNote = false;
  26.     this.bStartHighLightGesture = false;
  27.     this.currentHighLight = null;
  28.     this.bStartHighLight = false;
  29.     this.gestureLastY = -1;
  30.     this.gestureLastX = -1;
  31.     this.gestureMoveY = 0;
  32.     this.gestureMoveX = 0;
  33.     this.currentMoveY = 0;
  34.     this.currentMoveX = 0;
  35.     this.init_moveY = 0;
  36.     this.init_moveX = 0;
  37.     this.totalLast = 0;
  38.     this.totalDistance = 0;
  39.     this.last_moveY = 0;
  40.     this.last_moveX = 0;
  41.     this.page_offsetY = 0;
  42.     this.page_offsetX = 0;
  43.     this.realScale = 1;
  44.     this.totalGeustureScale = 0;
  45.     this.gestureScale = 1;
  46.     this.startMoveGesture = false;
  47.     this.startFingerDistance = 0;
  48.     this.startZoomGesture = false;
  49.     this.rightPageNum = -1;
  50.     this.leftPageNum = -1;
  51.     this.bookContext = new core.BookContext();
  52.     this.tweener = new core.Tweener();
  53.     this.currentPageNum = 0;
  54.     this.zoomStatus = core.ZoomStatus.normal;
  55.     this.zoomCSS = "position:absolute;left:0px;top:0px;width:100%;height:100%;overflow: hide;" + "-webkit-tap-highlight-color: rgba(255, 255, 255, 0);" + "-webkit-user-select: none;";
  56. };
  57. FlipBook.__name__ = true;
  58. FlipBook.prototype = {
  59.     f_sort: function(x,y) {
  60.         if(x.pageNum > y.pageNum) return 1;
  61.         if(x.pageNum == y.pageNum) return 0;
  62.         return -1;
  63.     }
  64.     ,onButtonBookmark: function(e) {
  65.         if(this.topMenuBarBg.style.opacity == 0) return;
  66.         this.stopFlip();
  67.         if(this.currentTopBarButton == this.btnBookMark) {
  68.             this.hideTopBar();
  69.             return;
  70.         }
  71.         this.resetAndShowTopBar("bookmarks");
  72.         this.setTopTitle("BookmarkView");
  73.         this.currentTopBarButton = this.btnBookMark;
  74.         var bookmarks = RunTime.book.bookmarks;
  75.         var lv = !this.checkIfExistBookmark(this.leftPageNum) && this.leftPageNum != -1;
  76.         var rv = !this.checkIfExistBookmark(this.rightPageNum) && this.rightPageNum != -1;
  77.         bookmarks.sort($bind(this,this.f_sort));
  78.         var html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,lv,rv);
  79.         if(RunTime.book.rightToLeft) html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,rv,lv);
  80.         this.topBarContent.innerHTML = html;
  81.         this.topBarContent.style.display = "block";
  82.         this.HideBarOnPhone();
  83.     }
  84.     ,resetHighlightButton: function() {
  85.         this.bStartHighLight = false;
  86.         this.btnMask.style.backgroundColor = "";
  87.     }
  88.     ,onAboutUsClick: function(e) {
  89.         if(this.topMenuBarBg.style.opacity == 0) return;
  90.         this.stopFlip();
  91.         if(this.currentTopBarButton == this.btnAboutUs) {
  92.             this.hideTopBar();
  93.             return;
  94.         }
  95.         this.resetAndShowTopBar("about");
  96.         this.currentTopBarButton = this.btnAboutUs;
  97.         this.setTopTitle("AboutUs");
  98.         if(RunTime.contentInfo != null) {
  99.             var html = core.HtmlHelper.toAboutHtml(RunTime.aboutInfo,RunTime.bookInfo);
  100.             this.topBarContent.innerHTML = html;
  101.             this.topBarContent.style.display = "block";
  102.         }
  103.         this.HideBarOnPhone();
  104.     }
  105.     ,resetNoteButton: function() {
  106.         this.bStartNote = false;
  107.         this.btnNote.style.backgroundColor = "";
  108.     }
  109.     ,onButtonNoteClick: function(e) {
  110.         if(this.topMenuBarBg.style.opacity == 0) return;
  111.         this.resetHighlightButton();
  112.         this.bStartNote = !this.bStartNote;
  113.         if(this.bStartNote) this.btnNote.style.backgroundColor = "#ff00ff"; else this.btnNote.style.backgroundColor = "";
  114.         this.HideBarOnPhone();
  115.     }
  116.     ,onButtonMaskClick: function(e) {
  117.         if(this.topMenuBarBg.style.opacity == 0) return;
  118.         if(e != null) {
  119.             e.preventDefault();
  120.             e.stopPropagation();
  121.             this.bStartHighLight = !this.bStartHighLight;
  122.         } else this.bStartHighLight = false;
  123.         this.resetNoteButton();
  124.         if(this.bStartHighLight) this.btnMask.style.backgroundColor = "#ff00ff"; else this.btnMask.style.backgroundColor = "";
  125.         this.HideBarOnPhone();
  126.     }
  127.     ,resetZoom: function() {
  128.         this.startZoomGesture = false;
  129.         this.startFingerDistance = 0;
  130.         this.startMoveGesture = false;
  131.         this.page_offsetX = 0;
  132.         this.page_offsetY = 0;
  133.         this.last_moveX = 0;
  134.         this.last_moveY = 0;
  135.         this.init_moveX = 0;
  136.         this.init_moveY = 0;
  137.     }
  138.     ,updateVideoLayout: function() {
  139.         var list = this.findVideoHtmlDoms();
  140.         var videos = new Array();
  141.         var _g1 = 0, _g = list.length;
  142.         while(_g1 < _g) {
  143.             var i = _g1++;
  144.             var dom = list[i];
  145.             var _g3 = 0, _g2 = RunTime.book.videos.length;
  146.             while(_g3 < _g2) {
  147.                 var j = _g3++;
  148.                 var video = RunTime.book.videos[j];
  149.                 if(video.id == dom.id) video.updateLayout(dom);
  150.             }
  151.         }
  152.     }
  153.     ,findVideoHtmlDoms: function() {
  154.         var list = new Array();
  155.         if(this.cvsVideo != null) {
  156.             var c = this.cvsVideo.childNodes;
  157.             var _g1 = 0, _g = c.length;
  158.             while(_g1 < _g) {
  159.                 var i = _g1++;
  160.                 list.push(c[i]);
  161.             }
  162.         }
  163.         return list;
  164.     }
  165.     ,hackHtmlDom: function(item) {
  166.         item.onclick = $bind(this,this.forbidden);
  167.         item.ontouchstart = $bind(this,this.forbidden);
  168.         item.ontouchmove = $bind(this,this.forbidden);
  169.         item.ontouchend = $bind(this,this.forbidden);
  170.         item.ontouchcancel = $bind(this,this.forbidden);
  171.         item.gestureend = $bind(this,this.forbidden);
  172.         item.gesturestart = $bind(this,this.forbidden);
  173.         item.gesturechange = $bind(this,this.forbidden);
  174.         item.onscroll = $bind(this,this.forbidden);
  175.         item.onmousewheel = $bind(this,this.forbidden);
  176.         item.ondblclick = $bind(this,this.forbidden);
  177.     }
  178.     ,attachVideoTouchEvents: function() {
  179.         var list = this.findVideoHtmlDoms();
  180.         var _g1 = 0, _g = list.length;
  181.         while(_g1 < _g) {
  182.             var i = _g1++;
  183.             var item = list[i];
  184.         }
  185.     }
  186.     ,showPopupAudio: function(item) {
  187.         item.url = item.destination;
  188.         var pageNum = item.pageNum;
  189.         var audio = new core.AudioInfo();
  190.         audio.pageNum = pageNum;
  191.         audio.url = item.destination;
  192.         this.cvsLeftPageBgAudio.innerHTML = "";
  193.         this.cvsLeftPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audio,true);
  194.         var item1 = js.Lib.document.getElementById("cvsLeftPageBgAudio").getElementsByTagName("audio")[0];
  195.         item1.play();
  196.     }
  197.     ,loadCtxNotes: function() {
  198.         var notes = new Array();
  199.         if(RunTime.book != null && RunTime.book.notes != null) {
  200.             var current = 0;
  201.             if(this.currentPageNum != null) current = this.currentPageNum;
  202.             var _g1 = 0, _g = RunTime.book.notes.length;
  203.             while(_g1 < _g) {
  204.                 var i = _g1++;
  205.                 var item = RunTime.book.notes[i];
  206.                 if(item.pageNum == current) notes.push(item);
  207.             }
  208.         }
  209.         this.bookContext.notes = notes;
  210.     }
  211.     ,loadCtxHighLights: function() {
  212.         var highlights = new Array();
  213.         if(RunTime.book != null && RunTime.book.highlights != null) {
  214.             var current = 0;
  215.             if(this.currentPageNum != null) current = this.currentPageNum;
  216.             var _g1 = 0, _g = RunTime.book.highlights.length;
  217.             while(_g1 < _g) {
  218.                 var i = _g1++;
  219.                 var item = RunTime.book.highlights[i];
  220.                 if(item.pageNum == current) highlights.push(item);
  221.             }
  222.         }
  223.         this.bookContext.highlights = highlights;
  224.     }
  225.     ,loadCtxButtons: function() {
  226.         var buttons = new Array();
  227.         if(RunTime.book != null && RunTime.book.buttons != null) {
  228.             var current = 0;
  229.             if(this.currentPageNum != null) current = this.currentPageNum;
  230.             var _g1 = 0, _g = RunTime.book.buttons.length;
  231.             while(_g1 < _g) {
  232.                 var i = _g1++;
  233.                 var item = RunTime.book.buttons[i];
  234.                 if(item.pageNum == current) buttons.push(item); else if(item.layer == "foreground") buttons.push(item);
  235.             }
  236.         }
  237.         this.bookContext.buttons = buttons;
  238.     }
  239.     ,updateAudios: function() {
  240.         var audios = this.getCurrentPageAudios();
  241.         if(audios.left != null || audios.right != null) {
  242.             this.cvsLeftPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audios.left,true);
  243.             this.cvsRightPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audios.right,false);
  244.         } else RunTime.clearBgAudio();
  245.     }
  246.     ,renderVideo: function(item) {
  247.         this.cvsVideo.innerHTML += core.HtmlHelper.toVideoHtml(item);
  248.     }
  249.     ,updateVideos: function() {
  250.         this.loadCtxVideos();
  251.         var videos = this.bookContext.videos;
  252.         if(videos != null) {
  253.             var _g1 = 0, _g = videos.length;
  254.             while(_g1 < _g) {
  255.                 var i = _g1++;
  256.                 var item = videos[i];
  257.                 this.renderVideo(item);
  258.             }
  259.         }
  260.         this.attachVideoTouchEvents();
  261.     }
  262.     ,clearVideos: function() {
  263.         this.cvsVideo.innerHTML = "";
  264.     }
  265.     ,renderSlideshow: function(item) {
  266.         this.cvsSlideshow.innerHTML += core.HtmlHelper.toSlideshow(item);
  267.     }
  268.     ,updateSlideshow: function() {
  269.         var slides = this.bookContext.slideshow;
  270.         if(slides != null) {
  271.             var _g1 = 0, _g = slides.length;
  272.             while(_g1 < _g) {
  273.                 var i = _g1++;
  274.                 var item = slides[i];
  275.                 this.renderSlideshow(item);
  276.                 item.startTweener();
  277.             }
  278.         }
  279.     }
  280.     ,clearSlideshow: function() {
  281.         this.cvsSlideshow.innerHTML = "";
  282.         var slides = this.bookContext.slideshow;
  283.         if(slides != null) {
  284.             var _g1 = 0, _g = slides.length;
  285.             while(_g1 < _g) {
  286.                 var i = _g1++;
  287.                 var item = slides[i];
  288.                 item.stopTweener();
  289.             }
  290.         }
  291.     }
  292.     ,showBottomBar: function(e) {
  293.         this.topMenuBarBg.style.cssText = "opacity:" + RunTime.bottomBarAlpha + ";  -webkit-transition: 0.3s ease-out; ";
  294.         this.bottomBar.style.cssText = "opacity:" + 1 + "; -webkit-transition: 0.3s ease-out; ";
  295.         this.bottomBar.style.display = "inline-block";
  296.         this.bottomBarBg.style.opacity = RunTime.bottomBarAlpha;
  297.         this.topMenuBar.style.display = "inline-block";
  298.         this.bCanGestureZoom = false;
  299.         RunTime.saveBottomBarVisible(true);
  300.     }
  301.     ,getCurrentBBV: function() {
  302.         if(this.bottomBar.style.display == "inline-block") return "1"; else return "0";
  303.     }
  304.     ,hideBottomBar: function(e,animate,atOnce) {
  305.         if(atOnce == null) atOnce = false;
  306.         if(animate == null) animate = true;
  307.         if(e != null) {
  308.             var t = e.target;
  309.             if(t == this.btnAutoFlip || t == this.btnContents || t == this.btnFirstPage || t == this.btnLastPage || t == this.btnNextPage || t == this.btnPrevPage || t == this.btnSearch || t == this.btnThumbs || t == this.tbPage || t == this.imgLogo) return;
  310.         }
  311.         if(atOnce) {
  312.             this.topMenuBarBg.style.cssText = "opacity:0 ; ";
  313.             this.bottomBar.style.cssText = "opacity: 0 ;";
  314.         } else {
  315.             this.topMenuBarBg.style.cssText = "opacity:0 ; -webkit-transition: 0.3s ease-out; ";
  316.             this.bottomBar.style.cssText = "opacity: 0 ; -webkit-transition: 0.3s ease-out; ";
  317.             this.bCanGestureZoom = false;
  318.         }
  319.         RunTime.saveBottomBarVisible(false);
  320.     }
  321.     ,getCurrentPageAudios: function() {
  322.         var audios = RunTime.book.audios;
  323.         var match = { left : null, right : null};
  324.         var pg = this.getCurrentPageNum();
  325.         var _g1 = 0, _g = audios.length;
  326.         while(_g1 < _g) {
  327.             var i = _g1++;
  328.             var item = audios[i];
  329.             if(item.pageNum == pg) match.left = item;
  330.         }
  331.         return match;
  332.     }
  333.     ,getFullText: function(pages) {
  334.         var result = "";
  335.         var pg = this.getCurrentPageNum();
  336.         var _g1 = 0, _g = pages.length;
  337.         while(_g1 < _g) {
  338.             var i = _g1++;
  339.             var item = pages[i];
  340.             if(item.num == pg) {
  341.                 result += "<br />";
  342.                 result += "<br />";
  343.                 result += "==== Page " + Std.string(pg + 1) + " ====";
  344.                 result += "<br />";
  345.                 result += "<br />";
  346.                 result += item.content;
  347.                 result += "<br />";
  348.                 result += "<br />";
  349.                 break;
  350.             }
  351.         }
  352.         result = StringTools.replace(result,"\n","<br />");
  353.         return result;
  354.     }
  355.     ,updateFullTextCore: function(pages) {
  356.         var result = this.getFullText(pages);
  357.         this.topFullTextContent.innerHTML = result;
  358.         this.topFullTextContent.scrollTop = 0;
  359.     }
  360.     ,updateFullText: function() {
  361.         RunTime.invokePageContentsAction($bind(this,this.updateFullTextCore));
  362.     }
  363.     ,showTxtCore: function(pages) {
  364.         var result = this.getFullText(pages);
  365.         this.resetAndShowTopBar("text");
  366.         this.setTopTitle("FullText");
  367.         this.currentTopBarButton = this.btnShowTxt;
  368.         this.topFullTextContent.innerHTML = result;
  369.         this.topFullTextContent.scrollTop = 0;
  370.     }
  371.     ,onShowTxtClick: function(e) {
  372.         if(this.topMenuBarBg.style.opacity == 0) return;
  373.         this.stopFlip();
  374.         if(this.currentTopBarButton == this.btnShowTxt) {
  375.             this.hideTopBar();
  376.             return;
  377.         }
  378.         this.HideBarOnPhone();
  379.         RunTime.invokePageContentsAction($bind(this,this.showTxtCore));
  380.     }
  381.     ,onZoomClick: function(e) {
  382.         if(this.topMenuBarBg.style.opacity == 0) return;
  383.         this.zoomAt(null,null);
  384.     }
  385.     ,onAutoFlipClick: function(e) {
  386.         if(this.topMenuBarBg.style.opacity == 0) return;
  387.         if(this.zoomLeftPage.src != "") {
  388.             this.zoomLeftPage.src = "";
  389.             this.zoomLeftPage.style.display = "none";
  390.         }
  391.         if(this.zoomRightPage.src != "") {
  392.             this.zoomRightPage.src = "";
  393.             this.zoomRightPage.style.display = "none";
  394.         }
  395.         this.stopFlip(false);
  396.         this.hideTopBar();
  397.         if(this.isAutoFliping == true) {
  398.             this.isAutoFliping = false;
  399.             this.btnAutoFlip.style.opacity = 1;
  400.         } else {
  401.             this.isAutoFliping = true;
  402.             this.btnAutoFlip.style.opacity = RunTime.autoflipButtonUnselectedAlpha;
  403.             this.flipTweener = new core.Tweener();
  404.             var self = this;
  405.             var countOfClip = 50 * RunTime.book.autoFlipSecond;
  406.             this.flipTweener.onChange = function(count) {
  407.                 if(count % countOfClip != 0) return;
  408.                 if(self.isAutoFliping == false) return;
  409.                 if(self.canTurnRight() == true) {
  410.                     if(RunTime.book.rightToLeft) self.turnPage(-1); else self.turnPage(1);
  411.                 } else self.stopFlip();
  412.             };
  413.             this.flipTweener.start(1000000);
  414.         }
  415.     }
  416.     ,canTurnRight: function() {
  417.         var num = this.getCurrentPageNum();
  418.         return num < RunTime.book.pages.length - 1;
  419.     }
  420.     ,preloadPages: function(num) {
  421.         if(RunTime.enablePreload == false) return;
  422.         RunTime.book.preloadPages(num);
  423.     }
  424.     ,stopFlip: function(resetFlipFlag) {
  425.         if(resetFlipFlag == null) resetFlipFlag = true;
  426.         if(this.flipTweener != null) {
  427.             this.flipTweener.onChange = null;
  428.             this.flipTweener.stop();
  429.             this.flipTweener = null;
  430.         }
  431.         if(resetFlipFlag == true) {
  432.             this.isAutoFliping = false;
  433.             this.btnAutoFlip.style.opacity = 1;
  434.         }
  435.     }
  436.     ,checkIfExistBookmark: function(pageNum) {
  437.         var i = 0;
  438.         var _g1 = 0, _g = RunTime.book.bookmarks.length;
  439.         while(_g1 < _g) {
  440.             var i1 = _g1++;
  441.             if(pageNum == RunTime.book.bookmarks[i1].pageNum) return true;
  442.         }
  443.         return false;
  444.     }
  445.     ,loadCurrentBookmark: function() {
  446.         var bms = new Array();
  447.         if(RunTime.book != null && RunTime.book.bookmarks != null) {
  448.             var _g1 = 0, _g = RunTime.book.bookmarks.length;
  449.             while(_g1 < _g) {
  450.                 var i = _g1++;
  451.                 var bm = RunTime.book.bookmarks[i];
  452.                 if(bm.pageNum == this.currentPageNum + 1) bms.push(bm);
  453.             }
  454.         }
  455.         this.bookContext.bookmarks = bms;
  456.     }
  457.     ,addBookmark: function(layout,text) {
  458.         if(layout == null) layout = 0;
  459.         var bookmark = new core.Bookmark();
  460.         if(layout == -1) {
  461.             if(RunTime.book.rightToLeft) bookmark.pageNum = this.rightPageNum; else bookmark.pageNum = this.leftPageNum;
  462.         } else if(layout == 1) {
  463.             if(RunTime.book.rightToLeft) bookmark.pageNum = this.leftPageNum; else bookmark.pageNum = this.rightPageNum;
  464.         } else if(layout == 0) bookmark.pageNum = this.getCurrentPageNum() + 1;
  465.         bookmark.text = text;
  466.         bookmark.save();
  467.         RunTime.book.bookmarks.push(bookmark.clone());
  468.         var bookmarks = RunTime.book.bookmarks;
  469.         var lv = !this.checkIfExistBookmark(this.leftPageNum) && this.leftPageNum != -1;
  470.         var rv = !this.checkIfExistBookmark(this.rightPageNum) && this.rightPageNum != -1;
  471.         var html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,lv,rv);
  472.         if(RunTime.book.rightToLeft) html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,rv,lv);
  473.         this.topBarContent.innerHTML = html;
  474.     }
  475.     ,removeBookmark: function(pageNum) {
  476.         var i = 0;
  477.         var tmp = new Array();
  478.         var currentBookmark = null;
  479.         var _g1 = 0, _g = RunTime.book.bookmarks.length;
  480.         while(_g1 < _g) {
  481.             var i1 = _g1++;
  482.             haxe.Log.trace(RunTime.book.bookmarks[i1].pageNum,{ fileName : "FlipBook.hx", lineNumber : 2070, className : "FlipBook", methodName : "removeBookmark"});
  483.             if(pageNum + 1 != RunTime.book.bookmarks[i1].pageNum) tmp.push(RunTime.book.bookmarks[i1]); else currentBookmark = RunTime.book.bookmarks[i1];
  484.         }
  485.         if(currentBookmark != null) currentBookmark.remove();
  486.         RunTime.book.bookmarks = tmp;
  487.         var bookmarks = RunTime.book.bookmarks;
  488.         var lv = !this.checkIfExistBookmark(this.leftPageNum) && this.leftPageNum != -1;
  489.         var rv = !this.checkIfExistBookmark(this.rightPageNum) && this.rightPageNum != -1;
  490.         var html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,lv,rv);
  491.         if(RunTime.book.rightToLeft) html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,rv,lv);
  492.         this.topBarContent.innerHTML = html;
  493.     }
  494.     ,getCurrentPageNum: function() {
  495.         var num = 0;
  496.         if(this.currentPageNum != null) num = this.currentPageNum;
  497.         return num;
  498.     }
  499.     ,searchInPages: function(pages) {
  500.         var results = [];
  501.         var _g1 = 0, _g = pages.length;
  502.         while(_g1 < _g) {
  503.             var i = _g1++;
  504.             var item = pages[i];
  505.             if(item.content == null || item.content == "") continue;
  506.             if(item.contentLowerCase == null) item.contentLowerCase = item.content.toLowerCase();
  507.             var posList = orc.utils.Util.searchPos(item.contentLowerCase,this.searchWord);
  508.             results = results.concat(orc.utils.Util.createSearchResults(item.content,this.searchWord,posList,Std.parseInt(item.id)));
  509.         }
  510.         return results;
  511.     }
  512.     ,searchCore: function(pages) {
  513.         if(this.searchWord == "") return;
  514.         var list = this.searchInPages(pages);
  515.         var dom = this.topBarContent;
  516.         var resultsDom = dom.getElementsByTagName("div")[1];
  517.         if(list == null || list.length == 0) resultsDom.innerHTML = "0 " + L.s("SearchResults","Search Results") + "."; else resultsDom.innerHTML = core.HtmlHelper.toSearchResultHtml(list);
  518.     }
  519.     ,getSearchInputDom: function() {
  520.         var dom = this.topBarContent;
  521.         var inputDom = dom.getElementsByTagName("input")[0];
  522.         return inputDom;
  523.     }
  524.     ,unlockPage: function() {
  525.         var dom = this.cvsOthers;
  526.         var inputDom = dom.getElementsByTagName("input")[0];
  527.         var word = inputDom.value;
  528.         word = StringTools.trim(word);
  529.         RunTime.tryUnlock(word);
  530.     }
  531.     ,inputPwd: function() {
  532.         var dom = this.cvsOthers;
  533.         var inputDom = dom.getElementsByTagName("input")[0];
  534.         var word = inputDom.value;
  535.         word = StringTools.trim(word);
  536.         RunTime.tryPwd(word);
  537.     }
  538.     ,search: function() {
  539.         var input = this.getSearchInputDom();
  540.         var word = input.value;
  541.         word = StringTools.trim(word);
  542.         if(word == "") return;
  543.         this.searchWord = word.toLowerCase();
  544.         RunTime.requestSearch($bind(this,this.searchCore));
  545.         RunTime.logSearch(this.searchWord);
  546.     }
  547.     ,onTbPageFocus: function(e) {
  548.         this.stopFlip();
  549.         var obj = this.tbPage;
  550.         obj.value = "";
  551.     }
  552.     ,onSearchClick: function(e) {
  553.         if(this.topMenuBarBg.style.opacity == 0) return;
  554.         this.stopFlip();
  555.         if(this.currentTopBarButton == this.btnSearch) {
  556.             this.hideTopBar();
  557.             return;
  558.         }
  559.         this.resetAndShowTopBar("search");
  560.         this.setTopTitle("Search");
  561.         this.currentTopBarButton = this.btnSearch;
  562.         var html = core.HtmlHelper.toSearchHtml();
  563.         this.topBarContent.innerHTML = html;
  564.         this.topBarContent.style.display = "block";
  565.         this.HideBarOnPhone();
  566.     }
  567.     ,onThumbsClick: function(e) {
  568.         if(this.topMenuBarBg.style.opacity == 0) return;
  569.         this.stopFlip();
  570.         if(this.currentTopBarButton == this.btnThumbs) {
  571.             this.hideTopBar();
  572.             return;
  573.         }
  574.         this.resetAndShowTopBar("thumbs");
  575.         this.setTopTitle("ThumbnailView");
  576.         this.currentTopBarButton = this.btnThumbs;
  577.         var html = core.HtmlHelper.toThumbsHtml(RunTime.book.pages);
  578.         this.topBarContent.innerHTML = html;
  579.         this.topBarContent.style.display = "block";
  580.         this.HideBarOnPhone();
  581.     }
  582.     ,HideBarOnPhone: function() {
  583.         var hide = false;
  584.         if(RunTime.clientWidth < 600) hide = true;
  585.         if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1) hide = true;
  586.         if(hide) this.hideBottomBar();
  587.     }
  588.     ,onContentsClick: function(e) {
  589.         if(this.topMenuBarBg.style.opacity == 0) return;
  590.         this.stopFlip();
  591.         if(this.currentTopBarButton == this.btnContents) {
  592.             this.hideTopBar();
  593.             return;
  594.         }
  595.         this.resetAndShowTopBar("toc");
  596.         this.currentTopBarButton = this.btnContents;
  597.         this.setTopTitle("TableOfContents");
  598.         if(RunTime.contentInfo != null) {
  599.             var html = core.HtmlHelper.toContentsHtml(RunTime.contentInfo);
  600.             this.topBarContent.innerHTML = html;
  601.             this.topBarContent.style.display = "block";
  602.         }
  603.         this.HideBarOnPhone();
  604.     }
  605.     ,onSnsClick: function(e) {
  606.         if(this.topMenuBarBg.style.opacity == 0) return;
  607.         this.stopFlip();
  608.         if(this.currentTopBarButton == this.btnSns) {
  609.             this.hideTopBar();
  610.             return;
  611.         }
  612.         this.resetAndShowTopBar("sns");
  613.         this.currentTopBarButton = this.btnSns;
  614.         this.setTopTitle("ShareOnSocialNetwork");
  615.         if(RunTime.contentInfo != null) {
  616.             var html = core.HtmlHelper.toSnsHtml(RunTime.shareInfo);
  617.             this.topBarContent.innerHTML = html;
  618.             this.topBarContent.style.display = "block";
  619.         }
  620.         this.HideBarOnPhone();
  621.     }
  622.     ,onEmailClick: function(e) {
  623.         if(this.topMenuBarBg.style.opacity == 0) return;
  624.         this.stopFlip();
  625.         if(this.currentTopBarButton == this.btnEmail) {
  626.             this.hideTopBar();
  627.             return;
  628.         }
  629.         this.resetAndShowTopBar("email");
  630.         this.currentTopBarButton = this.btnEmail;
  631.         this.setTopTitle("ShareThisFlipBook");
  632.         if(RunTime.contentInfo != null) {
  633.             var html = core.HtmlHelper.toEmailHtml();
  634.             this.topBarContent.innerHTML = html;
  635.             this.topBarContent.style.display = "block";
  636.         }
  637.         this.HideBarOnPhone();
  638.     }
  639.     ,focusSearchInput: function() {
  640.         var t = new core.Tweener();
  641.         var self = this;
  642.         t.start(10);
  643.         t.onChange = function(count) {
  644.             if(count == 10) {
  645.                 var input = self.getSearchInputDom();
  646.                 input.focus();
  647.             }
  648.         };
  649.     }
  650.     ,resetAndShowTopBar: function(type) {
  651.         if(type == null) type = "";
  652.         this.resetNoteButton();
  653.         this.resetHighlightButton();
  654.         var dom = this.topBar;
  655.         dom.style.height = "0px";
  656.         var step = 30;
  657.         var height = 300;
  658.         this.setVisible(this.topBarContent,false);
  659.         this.setVisible(this.topFullTextContent,false);
  660.         if(type == "text") {
  661.             HtmlDomHelper.setTopBarMaxSize(dom);
  662.             HtmlDomHelper.setTopFullTextContentMaxSize(this.topFullTextContent);
  663.             height = RunTime.clientHeight - 45 | 0;
  664.             step = step / 10 | 0;
  665.         } else HtmlDomHelper.setTopBarDefaultSize(dom);
  666.         var t = new core.Tweener();
  667.         var self = this;
  668.         self.setVisible(self.topBarContent,false);
  669.         dom.style.height = Std.string(height) + "px";
  670.         if(type == "text") self.setVisible(self.topFullTextContent,true); else self.setVisible(self.topBarContent,true);
  671.         if(type == "search") self.focusSearchInput();
  672.         this.setVisible(this.topBar,true);
  673.         this.topBarContent.innerHTML = "";
  674.     }
  675.     ,setTopTitle: function(val) {
  676.         var dom = js.Lib.document.getElementById("topTitle");
  677.         dom.innerHTML = L.s(val);
  678.     }
  679.     ,setVisible: function(dom,val) {
  680.         if(val == true) dom.style.display = "inline"; else dom.style.display = "none";
  681.     }
  682.     ,hideTopBar: function() {
  683.         this.setVisible(this.topBar,false);
  684.         this.currentTopBarButton = null;
  685.     }
  686.     ,loadCtxVideos: function() {
  687.         var videos = new Array();
  688.         if(RunTime.book != null && RunTime.book.videos != null) {
  689.             var current = 0;
  690.             if(this.currentPageNum != null) current = this.currentPageNum;
  691.             var _g1 = 0, _g = RunTime.book.videos.length;
  692.             while(_g1 < _g) {
  693.                 var i = _g1++;
  694.                 var item = RunTime.book.videos[i];
  695.                 if(item.pageNum == current) videos.push(item);
  696.             }
  697.         }
  698.         this.bookContext.videos = videos;
  699.     }
  700.     ,loadCtxHotlinks: function() {
  701.         var links = new Array();
  702.         if(RunTime.book != null && RunTime.book.hotlinks != null) {
  703.             var current = 0;
  704.             if(this.currentPageNum != null) current = this.currentPageNum;
  705.             var _g1 = 0, _g = RunTime.book.hotlinks.length;
  706.             while(_g1 < _g) {
  707.                 var i = _g1++;
  708.                 var item = RunTime.book.hotlinks[i];
  709.                 if(item.pageNum == current) links.push(item);
  710.             }
  711.         }
  712.         this.bookContext.hotlinks = links;
  713.     }
  714.     ,loadCtxSlideshow: function() {
  715.         var slides = new Array();
  716.         if(RunTime.book != null && RunTime.book.slideshows != null) {
  717.             var current = 0;
  718.             if(this.currentPageNum != null) current = this.currentPageNum;
  719.             var _g1 = 0, _g = RunTime.book.slideshows.length;
  720.             while(_g1 < _g) {
  721.                 var i = _g1++;
  722.                 var item = RunTime.book.slideshows[i];
  723.                 if(item.pageNum == current) slides.push(item);
  724.             }
  725.         }
  726.         this.bookContext.slideshow = slides;
  727.         this.updateSlideshow();
  728.     }
  729.     ,clearCtxNote: function() {
  730.         this.bookContext.notes = null;
  731.     }
  732.     ,clearCtxHighLight: function() {
  733.         this.bookContext.highlights = null;
  734.     }
  735.     ,clearCtxButtons: function() {
  736.         this.bookContext.buttons = null;
  737.     }
  738.     ,clearCtxHotlinks: function() {
  739.         this.bookContext.hotlinks = null;
  740.     }
  741.     ,onTopBarTouchMove: function(e) {
  742.         e.preventDefault();
  743.         var obj = e;
  744.         var touch = obj.touches.item(0);
  745.         var offset = this.touchTopBarY - touch.pageY;
  746.         this.topBarContent.scrollTop += Math.round(offset) | 0;
  747.         this.topFullTextContent.scrollTop += Math.round(offset) | 0;
  748.     }
  749.     ,onTopBarTouchEnd: function(e) {
  750.         this.touchTopBarActive = false;
  751.     }
  752.     ,onTopBarTouchStart: function(e) {
  753.         this.touchTopBarActive = true;
  754.         var obj = e;
  755.         var touch = obj.touches.item(0);
  756.         this.touchTopBarY = touch.pageY;
  757.     }
  758.     ,onGestureEnd: function(e) {
  759.         e.stopPropagation();
  760.     }
  761.     ,onGestureChange: function(e) {
  762.         e.stopPropagation();
  763.     }
  764.     ,onGestureStart: function(e) {
  765.         e.stopPropagation();
  766.     }
  767.     ,move: function(offsetX,offsetY) {
  768.         this.bookContext.offsetX += offsetX;
  769.         this.bookContext.offsetY += offsetY;
  770.         this.updateVideoLayout();
  771.         this.bookContext.render();
  772.     }
  773.     ,onTouchMove: function(e) {
  774.         if(!this.bStartNote && this.isMoveNote) {
  775.             if(this.isMoveNote) this.moveNote.moveClick(e.pageX,e.pageY);
  776.             return;
  777.         }
  778.         this.bAbortMouseDown = true;
  779.         var t = e;
  780.         if(t.type == "mousemove") {
  781.             this.onMouseTouchMove(e);
  782.             return;
  783.         }
  784.         if(RunTime.isPopupModal()) return;
  785.         if(this.bStartHighLight) {
  786.             e.preventDefault();
  787.             var obj = e;
  788.             var touch = obj.touches[0];
  789.             this.gestureLastX = touch.pageX;
  790.             this.gestureLastY = touch.pageY;
  791.             if(this.currentHighLight == null) return;
  792.             if(Math.abs(this.gestureLastX - this.currentHighLight.tx) <= 10 || Math.abs(this.gestureLastY - this.currentHighLight.ty) <= 10) return;
  793.             this.currentHighLight.twidth = this.gestureLastX - this.currentHighLight.tx;
  794.             this.currentHighLight.theight = this.gestureLastY - this.currentHighLight.ty;
  795.             this.getHighLightContext().clearRect(0,0,js.Lib.window.document.body.clientWidth,js.Lib.window.document.body.clientHeight);
  796.             this.bookContext.render();
  797.             this.currentHighLight.draw(this.getHighLightContext());
  798.             return;
  799.         }
  800.         if(this.bStartNote) {
  801.             e.preventDefault();
  802.             var obj = e;
  803.             var touch = obj.touches[0];
  804.             this.gestureLastX = touch.pageX;
  805.             this.gestureLastY = touch.pageY;
  806.             this.currentNote.twidth = 32;
  807.             this.currentNote.theight = 32;
  808.             this.getNoteContext().clearRect(0,0,js.Lib.window.document.body.clientWidth,js.Lib.window.document.body.clientHeight);
  809.             this.bookContext.render();
  810.             this.currentNote.draw(this.getNoteContext());
  811.             return;
  812.         }
  813.         var obj = e;
  814.         var touch = obj.touches[0];
  815.         var touch2 = obj.touches[1];
  816.         var date = new Date();
  817.         var offsetX = touch.clientX - this.touchStartX;
  818.         var offsetY = touch.clientY - this.touchStartY;
  819.         if(!this.checkCanZoom()) obj.preventDefault();
  820.         if(this.zoomStatus == core.ZoomStatus.zoomed && obj.touches.length == 1) {
  821.             if(this.currentOrgX + offsetX > js.Lib.document.body.clientWidth / 2) offsetX = js.Lib.document.body.clientWidth / 2 - this.currentOrgX;
  822.             if(this.currentOrgX + offsetX < -js.Lib.document.body.clientWidth / 2) offsetX = -js.Lib.document.body.clientWidth / 2 - this.currentOrgX;
  823.             if(this.currentOrgY + offsetY > js.Lib.document.body.clientHeight / 2) offsetY = js.Lib.document.body.clientHeight / 2 - this.currentOrgY;
  824.             if(this.currentOrgY + offsetY < -js.Lib.document.body.clientHeight / 2) offsetY = -js.Lib.document.body.clientHeight / 2 - this.currentOrgY;
  825.             this.zoom.style.cssText = this.getZoomInMoveCSS(offsetX | 0,offsetY | 0,false);
  826.             this.moveDX = offsetX | 0;
  827.             this.moveDY = offsetY | 0;
  828.         } else if(this.zoomStatus != core.ZoomStatus.zoomed && obj.touches.length == 1 && Math.abs(js.Lib.window.innerWidth - RunTime.clientWidth) < 10) {
  829.             this.zoomLeftPage.src = "";
  830.             this.zoomLeftPage.style.display = "none";
  831.             this.zoomRightPage.src = "";
  832.             this.zoomRightPage.style.display = "none";
  833.             if(offsetX > 20) {
  834.                 this.turnToPrevPage(null);
  835.                 this.touchActive = false;
  836.             } else if(offsetX < -20) {
  837.                 this.turnToNextPage(null);
  838.                 this.touchActive = false;
  839.             }
  840.             this.zoomAt(null,null);
  841.             obj.preventDefault();
  842.             this.startMoveGesture = false;
  843.         }
  844.         this.lastTouchX = touch.clientX;
  845.         this.lastTouchY = touch.clientY;
  846.     }
  847.     ,onMouseTouchMove: function(e) {
  848.         if(RunTime.isPopupModal()) return;
  849.         if(this.bStartHighLight) {
  850.             e.preventDefault();
  851.             var obj = e;
  852.             var touch = obj;
  853.             this.gestureLastX = touch.pageX;
  854.             this.gestureLastY = touch.pageY;
  855.             if(this.currentHighLight == null) return;
  856.             if(Math.abs(this.gestureLastX - this.currentHighLight.tx) <= 10 || Math.abs(this.gestureLastY - this.currentHighLight.ty) <= 10) return;
  857.             this.currentHighLight.twidth = this.gestureLastX - this.currentHighLight.tx;
  858.             this.currentHighLight.theight = this.gestureLastY - this.currentHighLight.ty;
  859.             this.getHighLightContext().clearRect(0,0,js.Lib.window.document.body.clientWidth,js.Lib.window.document.body.clientHeight);
  860.             this.bookContext.render();
  861.             this.currentHighLight.draw(this.getHighLightContext());
  862.             return;
  863.         }
  864.         if(this.bStartNote) {
  865.             e.preventDefault();
  866.             var obj = e;
  867.             var touch = obj;
  868.             this.gestureLastX = touch.pageX;
  869.             this.gestureLastY = touch.pageY;
  870.             this.currentNote.twidth = 32;
  871.             this.currentNote.theight = 32;
  872.             this.getNoteContext().clearRect(0,0,js.Lib.window.document.body.clientWidth,js.Lib.window.document.body.clientHeight);
  873.             this.bookContext.render();
  874.             this.currentNote.draw(this.getNoteContext());
  875.             return;
  876.         }
  877.         var obj = e;
  878.         var touch = obj;
  879.         var date = new Date();
  880.         var offsetX = touch.clientX - this.touchStartX;
  881.         var offsetY = touch.clientY - this.touchStartY;
  882.         if(!this.checkCanZoom()) obj.preventDefault();
  883.         if(this.zoomStatus == core.ZoomStatus.zoomed && this.startMoveGesture) {
  884.             if(this.currentOrgX + offsetX > js.Lib.document.body.clientWidth / 2) offsetX = js.Lib.document.body.clientWidth / 2 - this.currentOrgX;
  885.             if(this.currentOrgX + offsetX < -js.Lib.document.body.clientWidth / 2) offsetX = -js.Lib.document.body.clientWidth / 2 - this.currentOrgX;
  886.             if(this.currentOrgY + offsetY > js.Lib.document.body.clientHeight / 2) offsetY = js.Lib.document.body.clientHeight / 2 - this.currentOrgY;
  887.             if(this.currentOrgY + offsetY < -js.Lib.document.body.clientHeight / 2) offsetY = -js.Lib.document.body.clientHeight / 2 - this.currentOrgY;
  888.             this.zoom.style.cssText = this.getZoomInMoveCSS(offsetX | 0,offsetY | 0,true);
  889.             this.moveDX = offsetX | 0;
  890.             this.moveDY = offsetY | 0;
  891.         }
  892.         if(this.zoomStatus != core.ZoomStatus.zoomed && this.startMoveGesture && Math.abs(js.Lib.window.innerWidth - RunTime.clientWidth) < 10) {
  893.             this.zoomLeftPage.src = "";
  894.             this.zoomLeftPage.style.display = "none";
  895.             this.zoomRightPage.src = "";
  896.             this.zoomRightPage.style.display = "none";
  897.             if(offsetX > 0) {
  898.                 this.turnToPrevPage(null);
  899.                 this.touchActive = false;
  900.             } else if(offsetX < 0) {
  901.                 this.turnToNextPage(null);
  902.                 this.touchActive = false;
  903.             }
  904.             this.zoomAt(null,null);
  905.             obj.preventDefault();
  906.             this.startMoveGesture = false;
  907.         }
  908.         e.stopPropagation();
  909.         e.preventDefault();
  910.         this.lastTouchX = touch.clientX;
  911.         this.lastTouchY = touch.clientY;
  912.     }
  913.     ,checkCanZoom: function() {
  914.         var num = 0;
  915.         if(this.currentPageNum != null) num = this.currentPageNum;
  916.         var page = RunTime.getPage(num);
  917.         return page.canZoom;
  918.     }
  919.     ,onTouchEnd: function(e) {
  920.         this.bAbortMouseDown = false;
  921.         if(this.bStartHighLight && this.gestureLastX != -1 && this.gestureLastY != -1) {
  922.             var obj = e;
  923.             e.preventDefault();
  924.             if(this.gestureLastX < this.currentHighLight.tx) {
  925.                 this.currentHighLight.tx = this.gestureLastX;
  926.                 this.currentHighLight.twidth = Math.abs(this.currentHighLight.twidth);
  927.             }
  928.             if(this.gestureLastY < this.currentHighLight.ty) {
  929.                 this.currentHighLight.ty = this.gestureLastY;
  930.                 this.currentHighLight.theight = Math.abs(this.currentHighLight.theight);
  931.             }
  932.             this.currentHighLight.save();
  933.             RunTime.book.highlights.push(this.currentHighLight.clone());
  934.             this.loadCtxHighLights();
  935.             this.bookContext.render();
  936.             this.gestureLastX = -1;
  937.             this.gestureLastY = -1;
  938.             this.currentHighLight.tx = 0;
  939.             this.currentHighLight.ty = 0;
  940.             this.currentHighLight.twidth = 0;
  941.             this.currentHighLight.theight = 0;
  942.             this.currentHighLight.tpageNum = this.getCurrentPageNum();
  943.             this.currentHighLight = null;
  944.             this.onButtonMaskClick(null);
  945.             return;
  946.         }
  947.         if(this.bStartNote && this.gestureLastX != -1 && this.gestureLastY != -1) {
  948.             var obj = e;
  949.             e.preventDefault();
  950.             this.currentNote.twidth = 32;
  951.             this.currentNote.theight = 32;
  952.             this.currentNote.save();
  953.             var saveObj = this.currentNote.clone();
  954.             RunTime.book.notes.push(saveObj);
  955.             this.loadCtxNotes();
  956.             this.bookContext.render();
  957.             this.gestureLastX = -1;
  958.             this.gestureLastY = -1;
  959.             this.currentNote.tx = 0;
  960.             this.currentNote.ty = 0;
  961.             this.currentNote.twidth = 0;
  962.             this.currentNote.theight = 0;
  963.             this.currentNote.tpageNum = this.getCurrentPageNum();
  964.             this.onButtonNoteClick(null);
  965.             RunTime.currentNote = saveObj;
  966.             RunTime.currentNote.click();
  967.             return;
  968.         }
  969.         this.totalDistance += this.totalLast;
  970.         if(this.startZoomGesture) this.hideBottomBar();
  971.         if(this.startMoveGesture) {
  972.             this.currentOrgX += this.moveDX;
  973.             this.currentOrgY += this.moveDY;
  974.             this.moveDX = 0;
  975.             this.moveDY = 0;
  976.         }
  977.         if(this.totalDistance <= 0) {
  978.         }
  979.         e.stopPropagation();
  980.         this.touchActive = false;
  981.         this.startZoomGesture = false;
  982.         this.startFingerDistance = 0;
  983.         this.startMoveGesture = false;
  984.         if(!this.bStartNote && this.isMoveNote) {
  985.             this.stopFlip();
  986.             this.isMoveNote = false;
  987.             this.moveNote = null;
  988.             if(RunTime.currentMoveNote != null) RunTime.currentMoveNote.moveSave();
  989.             return;
  990.         }
  991.         return;
  992.     }
  993.     ,getFullUrl: function() {
  994.         return RunTime.urlIndex + "?page=" + Std.string(this.currentPageNum) + "&bbv=" + this.getCurrentBBV() + "&pcode=" + RunTime.pcode;
  995.     }
  996.     ,resizeContainer: function(w,h,l,t) {
  997.     }
  998.     ,getDistance: function(touch1,touch2) {
  999.         var x1 = touch1.clientX;
  1000.         var x2 = touch2.clientX;
  1001.         var y1 = touch1.clientY;
  1002.         var y2 = touch2.clientY;
  1003.         return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
  1004.     }
  1005.     ,zoomIn: function(page,point0,point1) {
  1006.         this.zoomStatus = core.ZoomStatus.zoomed;
  1007.         if(page == null) return;
  1008.         if(!page.locked) this.zoomLeftPage.src = page.getBigPageUrl(); else {
  1009.         }
  1010.         this.zoomLeftPage.style.display = "inline";
  1011.     }
  1012.     ,zoomOut: function() {
  1013.         this.zoomStatus = core.ZoomStatus.normal;
  1014.     }
  1015.     ,zoomAt: function(point0,point1) {
  1016.         var num = 0;
  1017.         if(this.currentPageNum != null) num = this.currentPageNum;
  1018.         var page = RunTime.getPage(num);
  1019.         if(point0 == null || point1 == null) this.zoomOut(); else this.zoomIn(page,point0,point1);
  1020.     }
  1021.     ,fillImg: function(urlPage) {
  1022.         this.zoomLeftPage.src = urlPage;
  1023.     }
  1024.     ,onTouchStart: function(e) {
  1025.         if(!this.bStartNote) {
  1026.             if(this.onNoteMoveClick(e.pageX,e.pageY)) this.isMoveNote = true;
  1027.         }
  1028.         var obj = e;
  1029.         if(obj.touches == null) {
  1030.             this.onMouseTouchStart(e);
  1031.             return;
  1032.         }
  1033.         var touch = obj.touches[0];
  1034.         if(this.onHighLightClick(touch.pageX,touch.pageY)) return;
  1035.         if(this.onNoteClick(touch.pageX,touch.pageY)) return;
  1036.         if(this.bStartHighLight) {
  1037.             this.currentHighLight = new core.HighLight();
  1038.             this.currentHighLight.tx = touch.pageX;
  1039.             this.currentHighLight.ty = touch.pageY;
  1040.             if(RunTime.singlePage) this.currentHighLight.tpageNum = this.getCurrentPageNum(); else if(RunTime.book.rightToLeft) {
  1041.                 if(this.currentHighLight.tx > RunTime.clientWidth / 2) this.currentHighLight.tpageNum = this.leftPageNum - 1; else this.currentHighLight.tpageNum = this.rightPageNum - 1;
  1042.             } else if(this.currentHighLight.tx > RunTime.clientWidth / 2) this.currentHighLight.tpageNum = this.rightPageNum - 1; else this.currentHighLight.tpageNum = this.leftPageNum - 1;
  1043.             return;
  1044.         }
  1045.         if(this.bStartNote) {
  1046.             this.currentNote = new core.NoteIcon();
  1047.             this.currentNote.tx = touch.pageX;
  1048.             this.currentNote.ty = touch.pageY;
  1049.             this.gestureLastX = touch.pageX;
  1050.             this.gestureLastY = touch.pageY;
  1051.             if(RunTime.singlePage) this.currentNote.tpageNum = this.getCurrentPageNum(); else if(RunTime.book.rightToLeft) {
  1052.                 if(this.currentNote.tx > RunTime.clientWidth / 2) this.currentNote.tpageNum = this.leftPageNum - 1; else this.currentNote.tpageNum = this.rightPageNum - 1;
  1053.             } else if(this.currentNote.tx > RunTime.clientWidth / 2) this.currentNote.tpageNum = this.rightPageNum - 1; else this.currentNote.tpageNum = this.leftPageNum - 1;
  1054.             return;
  1055.         }
  1056.         var date = new Date();
  1057.         if(this.lastTouchTime != null) {
  1058.             var lastTime = this.lastTouchTime.getTime();
  1059.             var newTime = date.getTime();
  1060.             if(newTime - lastTime < RunTime.doubleClickIntervalMs) {
  1061.                 this.zoomAt(0,0);
  1062.                 this.lastTouchTime = null;
  1063.                 if(this.zoomStatus == core.ZoomStatus.zoomed) {
  1064.                 } else {
  1065.                 }
  1066.                 return;
  1067.             }
  1068.         }
  1069.         this.lastTouchTime = date;
  1070.         this.stopFlip();
  1071.         this.touchActive = true;
  1072.         if(this.zoomStatus == core.ZoomStatus.zoomed) this.touchActive = false;
  1073.         this.onButtonLinkClick(touch.pageX,touch.pageY);
  1074.         this.touchStartX = touch.clientX;
  1075.         this.touchStartY = touch.clientY;
  1076.         this.lastTouchX = this.touchStartX;
  1077.         this.lastTouchY = this.touchStartY;
  1078.         this.startMoveGesture = true;
  1079.     }
  1080.     ,onNoteMoveClick: function(x,y) {
  1081.         this.moveNote = this.bookContext.getNoteAt(x,y);
  1082.         if(this.moveNote != null) {
  1083.             RunTime.currentMoveNote = this.moveNote;
  1084.             return true;
  1085.         } else RunTime.currentMoveNote = null;
  1086.         return false;
  1087.     }
  1088.     ,onMouseTouchStart: function(e) {
  1089.         var obj = e;
  1090.         var touch = obj;
  1091.         if(this.onHighLightClick(touch.pageX,touch.pageY)) return;
  1092.         if(this.onNoteClick(touch.pageX,touch.pageY)) return;
  1093.         if(this.bStartHighLight) {
  1094.             this.currentHighLight = new core.HighLight();
  1095.             this.currentHighLight.tx = touch.pageX;
  1096.             this.currentHighLight.ty = touch.pageY;
  1097.             if(RunTime.singlePage) this.currentHighLight.tpageNum = this.getCurrentPageNum(); else if(RunTime.book.rightToLeft) {
  1098.                 if(this.currentHighLight.tx > RunTime.clientWidth / 2) this.currentHighLight.tpageNum = this.leftPageNum - 1; else this.currentHighLight.tpageNum = this.rightPageNum - 1;
  1099.             } else if(this.currentHighLight.tx > RunTime.clientWidth / 2) this.currentHighLight.tpageNum = this.rightPageNum - 1; else this.currentHighLight.tpageNum = this.leftPageNum - 1;
  1100.             return;
  1101.         }
  1102.         if(this.bStartNote) {
  1103.             this.currentNote = new core.NoteIcon();
  1104.             this.currentNote.tx = touch.pageX;
  1105.             this.currentNote.ty = touch.pageY;
  1106.             this.gestureLastX = touch.pageX;
  1107.             this.gestureLastY = touch.pageY;
  1108.             if(RunTime.singlePage) this.currentNote.tpageNum = this.getCurrentPageNum(); else if(RunTime.book.rightToLeft) {
  1109.                 if(this.currentNote.tx > RunTime.clientWidth / 2) this.currentNote.tpageNum = this.leftPageNum - 1; else this.currentNote.tpageNum = this.rightPageNum - 1;
  1110.             } else if(this.currentNote.tx > RunTime.clientWidth / 2) this.currentNote.tpageNum = this.rightPageNum - 1; else this.currentNote.tpageNum = this.leftPageNum - 1;
  1111.             return;
  1112.         }
  1113.         var date = new Date();
  1114.         if(this.lastTouchTime != null) {
  1115.             var lastTime = this.lastTouchTime.getTime();
  1116.             var newTime = date.getTime();
  1117.             if(newTime - lastTime < RunTime.doubleClickIntervalMs) {
  1118.                 this.zoomAt(0,0);
  1119.                 this.lastTouchTime = null;
  1120.                 if(this.zoomStatus == core.ZoomStatus.zoomed) {
  1121.                 } else {
  1122.                 }
  1123.                 return;
  1124.             }
  1125.         }
  1126.         this.lastTouchTime = date;
  1127.         this.stopFlip();
  1128.         this.touchActive = true;
  1129.         if(this.zoomStatus == core.ZoomStatus.zoomed) this.touchActive = false;
  1130.         var centerX = js.Lib.document.body.clientWidth / 2 | 0;
  1131.         var centerY = js.Lib.document.body.clientHeight / 2 | 0;
  1132.         var _dx = 0;
  1133.         var _dy = 0;
  1134.         var xInBook = touch.pageX;
  1135.         var yInBook = touch.pageY;
  1136.         if(this.zoomLevel > 1) {
  1137.             _dx = -(touch.pageX - centerX + this.currentOrgX / (this.zoomLevel - 1) | 0);
  1138.             _dy = -(touch.pageY - centerY + this.currentOrgY / (this.zoomLevel - 1) | 0);
  1139.             xInBook = touch.pageX + _dx * (this.zoomLevel - 1) / this.zoomLevel;
  1140.             yInBook = touch.pageY + _dy * (this.zoomLevel - 1) / this.zoomLevel;
  1141.         }
  1142.         if(this.onButtonLinkClick(xInBook,yInBook)) this.startMoveGesture = false; else this.startMoveGesture = true;
  1143.         this.touchStartX = touch.clientX;
  1144.         this.touchStartY = touch.clientY;
  1145.         this.lastTouchX = this.touchStartX;
  1146.         this.lastTouchY = this.touchStartY;
  1147.     }
  1148.     ,onMouseMove: function(e) {
  1149.         e.stopPropagation();
  1150.         if(this.zoomStatus == core.ZoomStatus.zoomed) {
  1151.         }
  1152.     }
  1153.     ,onDblClick: function(e) {
  1154.         e.stopPropagation();
  1155.         this.ZoomWithCSS();
  1156.     }
  1157.     ,ZoomWithCSS: function() {
  1158.         this.zoomLevel += 1;
  1159.         this.zoomStatus = core.ZoomStatus.zoomed;
  1160.         if(this.zoomLevel > 3) {
  1161.             this.zoomLevel = 1;
  1162.             this.zoomStatus = core.ZoomStatus.normal;
  1163.             this.zoomAt(null,null);
  1164.             this.zoom.style.cssText = this.getZoomOutCSS();
  1165.             this.resetCSS();
  1166.             this.showBottomBar(null);
  1167.             return;
  1168.         }
  1169.         this.resetCSS();
  1170.         this.zoomAt(0,0);
  1171.         this.zoom.style.cssText = this.getZoomInCSS();
  1172.         this.hideBottomBar(null);
  1173.     }
  1174.     ,setCurrentPage: function(val) {
  1175.         var t = this.tbPage;
  1176.         t.value = Std.string(val);
  1177.     }
  1178.     ,setPageCount: function(val) {
  1179.         this.tbPageCount.innerHTML = "/ " + Std.string(val);
  1180.     }
  1181.     ,onEnterPage: function() {
  1182.         this.updateFullText();
  1183.         this.updateAudios();
  1184.         this.zoomAt(0,0);
  1185.     }
  1186.     ,TansRightToLeft: function() {
  1187.         this.turnToPage(RunTime.book.pages.length - 1);
  1188.     }
  1189.     ,turnToLastPage: function(e) {
  1190.         if(this.topMenuBarBg.style.opacity == 0) return;
  1191.         this.clearZoom();
  1192.         this.stopFlip();
  1193.         if(RunTime.book.rightToLeft) this.turnToPage(0); else this.turnToPage(RunTime.book.pages.length - 1);
  1194.     }
  1195.     ,turnToFirstPage: function(e) {
  1196.         if(this.topMenuBarBg.style.opacity == 0) return;
  1197.         this.clearZoom();
  1198.         this.stopFlip();
  1199.         if(RunTime.book.rightToLeft) this.turnToPage(RunTime.book.pages.length - 1); else this.turnToPage(0);
  1200.     }
  1201.     ,turnToPrevPage: function(e) {
  1202.         if(this.topMenuBarBg.style.opacity == 0) return;
  1203.         this.clearZoom();
  1204.         this.stopFlip();
  1205.         this.turnPage(-1);
  1206.     }
  1207.     ,clearZoom: function() {
  1208.         if(this.zoomLeftPage.src != "") {
  1209.             this.zoomLeftPage.src = "";
  1210.             this.zoomLeftPage.style.display = "none";
  1211.         }
  1212.         if(this.zoomRightPage.src != "") {
  1213.             this.zoomRightPage.src = "";
  1214.             this.zoomRightPage.style.display = "none";
  1215.         }
  1216.         RunTime.clearPopupContents();
  1217.         this.resetNoteButton();
  1218.         this.resetHighlightButton();
  1219.     }
  1220.     ,turnToNextPage: function(e) {
  1221.         if(this.topMenuBarBg.style.opacity == 0) return;
  1222.         this.clearZoom();
  1223.         this.stopFlip();
  1224.         this.turnPage(1);
  1225.     }
  1226.     ,turnToPage: function(pageNum) {
  1227.         this.clearZoom();
  1228.         this.preloadPages(pageNum);
  1229.         var page = RunTime.getPage(pageNum);
  1230.         if(page == null) return;
  1231.         this.setCurrentPage(pageNum + 1);
  1232.         this.currentPageNum = pageNum;
  1233.         this.hideTopBar();
  1234.         RunTime.flipBook.rightPageLock.style.display = "none";
  1235.         RunTime.flipBook.leftPageLock.style.display = "none";
  1236.         if(page != null && page.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1237.         this.clearSlideshow();
  1238.         this.loadCtxHotlinks();
  1239.         this.loadCtxSlideshow();
  1240.         this.loadCtxButtons();
  1241.         this.loadCtxHighLights();
  1242.         this.loadCtxNotes();
  1243.         this.loadCurrentBookmark();
  1244.         this.clearVideos();
  1245.         this.bookContext.removeAllPages();
  1246.         this.bookContext.resetLayoutParams();
  1247.         this.bookContext.addPage(page);
  1248.         this.bookContext.pageOffset = 0;
  1249.         this.bookContext.render();
  1250.         this.updateVideos();
  1251.         this.updateAudios();
  1252.         RunTime.logPageView(pageNum + 1);
  1253.     }
  1254.     ,turnPage: function(pageOffset) {
  1255.         if(pageOffset == 0) return;
  1256.         if(RunTime.book.rightToLeft) pageOffset = 0 - pageOffset;
  1257.         if(RunTime.book == null || RunTime.book.pages == null) return;
  1258.         var dstPageNum = this.currentPageNum + pageOffset;
  1259.         var dstPage = RunTime.getPage(dstPageNum);
  1260.         if(dstPage == null) return;
  1261.         this.resetZoom();
  1262.         this.setCurrentPage(dstPageNum + 1);
  1263.         this.preloadPages(dstPageNum + 1);
  1264.         var self = this;
  1265.         this.bookContext.removeAllPages();
  1266.         this.bookContext.resetLayoutParams();
  1267.         this.bookContext.addPage(RunTime.getPage(this.currentPageNum,0));
  1268.         this.bookContext.addPage(RunTime.getPage(this.currentPageNum,1));
  1269.         this.bookContext.addPage(RunTime.getPage(this.currentPageNum,-1));
  1270.         this.bookContext.pageOffset = 0;
  1271.         if(this.tweener != null) this.tweener.stop();
  1272.         var maxCount = 15;
  1273.         this.tweener.onChange = function(count) {
  1274.             var ratio = count / maxCount;
  1275.             if(RunTime.book.rightToLeft) self.bookContext.pageOffset = pageOffset * ratio; else self.bookContext.pageOffset = -pageOffset * ratio;
  1276.             if(count == maxCount) self.bookContext.pageOffset = -pageOffset;
  1277.             if(count == maxCount) {
  1278.                 self.currentPageNum = dstPageNum;
  1279.                 self.loadCtxHotlinks();
  1280.                 self.loadCtxSlideshow();
  1281.                 self.loadCtxButtons();
  1282.                 self.loadCtxHighLights();
  1283.                 self.loadCtxNotes();
  1284.                 self.updateVideos();
  1285.                 self.loadCurrentBookmark();
  1286.                 RunTime.flipBook.rightPageLock.style.display = "none";
  1287.                 RunTime.flipBook.leftPageLock.style.display = "none";
  1288.                 if(dstPage != null && dstPage.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1289.                 RunTime.logPageView(dstPageNum + 1);
  1290.                 RunTime.clearPopupContents();
  1291.                 self.onEnterPage();
  1292.             }
  1293.             self.bookContext.render();
  1294.         };
  1295.         this.clearCtxHotlinks();
  1296.         this.clearCtxButtons();
  1297.         this.clearVideos();
  1298.         this.clearSlideshow();
  1299.         this.tweener.start(maxCount | 0);
  1300.     }
  1301.     ,onMouseDown: function(e) {
  1302.         e.stopPropagation();
  1303.         if(this.bStartHighLight || this.bStartNote || this.bAbortMouseDown) return;
  1304.         if(this.zoomStatus == core.ZoomStatus.zoomed) return;
  1305.         if(this.topMenuBarBg.style.opacity != RunTime.bottomBarAlpha) this.showBottomBar(e); else this.hideBottomBar(e);
  1306.     }
  1307.     ,onMouseUp: function(e) {
  1308.     }
  1309.     ,onNoteClick: function(x,y) {
  1310.         var note = this.bookContext.getNoteAt(x,y);
  1311.         if(note != null && this.bStartNote) {
  1312.             RunTime.currentNote = note;
  1313.             note.click();
  1314.             return true;
  1315.         } else RunTime.currentNote = null;
  1316.         return false;
  1317.     }
  1318.     ,onHighLightClick: function(x,y) {
  1319.         var highlight = this.bookContext.getHighLightAt(x,y);
  1320.         if(highlight != null) {
  1321.             RunTime.currentHighLight = highlight;
  1322.             highlight.click();
  1323.             return true;
  1324.         } else RunTime.currentHighLight = null;
  1325.         return false;
  1326.     }
  1327.     ,onButtonLinkClick: function(x,y) {
  1328.         var hotlink = this.bookContext.getHotLinkAt(x,y);
  1329.         if(hotlink != null) {
  1330.             hotlink.click();
  1331.             return true;
  1332.         }
  1333.         var button = this.bookContext.getButtonAt(x,y);
  1334.         if(button != null) {
  1335.             button.click();
  1336.             return true;
  1337.         }
  1338.         return false;
  1339.     }
  1340.     ,loadPage: function(index) {
  1341.         RunTime.flipBook.rightPageLock.style.display = "none";
  1342.         this.preloadPages(index);
  1343.         this.currentPageNum = index;
  1344.         this.loadCtxHotlinks();
  1345.         this.loadCtxSlideshow();
  1346.         this.loadCurrentBookmark();
  1347.         var page = RunTime.getPage(this.currentPageNum);
  1348.         this.bookContext.addPage(page);
  1349.         if(page != null && page.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1350.         this.bookContext.render();
  1351.         var p = this.currentPageNum;
  1352.         if(p == null) p = 0;
  1353.         RunTime.logPageView(p + 1);
  1354.         this.onEnterPage();
  1355.     }
  1356.     ,afterInit: function() {
  1357.     }
  1358.     ,forbidden: function(e) {
  1359.         e.preventDefault();
  1360.         e.stopPropagation();
  1361.     }
  1362.     ,attachActions: function() {
  1363.         if(this.root == null) return;
  1364.         this.mask.ondblclick = $bind(this,this.onDblClick);
  1365.         if(js.Lib.window.navigator.userAgent.indexOf("MSIE") != -1) {
  1366.             this.cvsButton.onclick = $bind(this,this.onTouchStart);
  1367.             this.cvsHighLight.onclick = $bind(this,this.onTouchStart);
  1368.             this.cvsNote.onclick = $bind(this,this.onTouchStart);
  1369.             this.cvsBookmark.onclick = $bind(this,this.onTouchStart);
  1370.         }
  1371.         this.mask.onclick = $bind(this,this.onMouseDown);
  1372.         this.mask.onmousedown = $bind(this,this.onTouchStart);
  1373.         this.mask.onmousemove = $bind(this,this.onTouchMove);
  1374.         this.mask.onmouseup = $bind(this,this.onTouchEnd);
  1375.         this.mask.ontouchstart = $bind(this,this.onTouchStart);
  1376.         this.mask.ontouchmove = $bind(this,this.onTouchMove);
  1377.         this.mask.ontouchend = $bind(this,this.onTouchEnd);
  1378.         this.mask.ontouchcancel = $bind(this,this.onTouchEnd);
  1379.         this.mask.gestureend = $bind(this,this.onGestureEnd);
  1380.         this.mask.gesturestart = $bind(this,this.onGestureStart);
  1381.         this.mask.gesturechange = $bind(this,this.onGestureChange);
  1382.         this.mask.onscroll = $bind(this,this.forbidden);
  1383.         this.mask.onmousewheel = $bind(this,this.forbidden);
  1384.         this.cvsVideo.onclick = $bind(this,this.onMouseDown);
  1385.         this.cvsVideo.ontouchstart = $bind(this,this.onTouchStart);
  1386.         this.cvsVideo.ontouchmove = $bind(this,this.onTouchMove);
  1387.         this.cvsVideo.ontouchend = $bind(this,this.onTouchEnd);
  1388.         this.cvsVideo.ontouchcancel = $bind(this,this.onTouchEnd);
  1389.         this.cvsVideo.gestureend = $bind(this,this.onGestureEnd);
  1390.         this.cvsVideo.gesturestart = $bind(this,this.onGestureStart);
  1391.         this.cvsVideo.gesturechange = $bind(this,this.onGestureChange);
  1392.         this.maskPopup.onscroll = $bind(this,this.forbidden);
  1393.         this.maskPopup.onmousewheel = $bind(this,this.forbidden);
  1394.         if(js.Lib.window.navigator.userAgent.indexOf("iPad") != -1) {
  1395.             this.topBarContent.ontouchstart = $bind(this,this.onTopBarTouchStart);
  1396.             this.topBarContent.ontouchmove = $bind(this,this.onTopBarTouchMove);
  1397.             this.topBarContent.ontouchend = $bind(this,this.onTopBarTouchEnd);
  1398.             this.topBarContent.ontouchcancel = $bind(this,this.onTopBarTouchEnd);
  1399.             this.topFullTextContent.ontouchstart = $bind(this,this.onTopBarTouchStart);
  1400.             this.topFullTextContent.ontouchmove = $bind(this,this.onTopBarTouchMove);
  1401.             this.topFullTextContent.ontouchend = $bind(this,this.onTopBarTouchEnd);
  1402.             this.topFullTextContent.ontouchcancel = $bind(this,this.onTopBarTouchEnd);
  1403.         }
  1404.         this.btnNextPage.onclick = $bind(this,this.turnToNextPage);
  1405.         this.btnPrevPage.onclick = $bind(this,this.turnToPrevPage);
  1406.         this.btnFirstPage.onclick = $bind(this,this.turnToFirstPage);
  1407.         this.btnLastPage.onclick = $bind(this,this.turnToLastPage);
  1408.         this.btnContents.onclick = $bind(this,this.onContentsClick);
  1409.         this.btnEmail.onclick = $bind(this,this.onEmailClick);
  1410.         this.btnSns.onclick = $bind(this,this.onSnsClick);
  1411.         this.btnThumbs.onclick = $bind(this,this.onThumbsClick);
  1412.         this.btnSearch.onclick = $bind(this,this.onSearchClick);
  1413.         this.btnAutoFlip.onclick = $bind(this,this.onAutoFlipClick);
  1414.         this.btnShowTxt.onclick = $bind(this,this.onShowTxtClick);
  1415.         this.tbPage.onfocus = $bind(this,this.onTbPageFocus);
  1416.         this.btnZoom.ontouchstart = $bind(this,this.onZoomClick);
  1417.         this.btnMask.onclick = $bind(this,this.onButtonMaskClick);
  1418.         this.btnBookMark.onclick = $bind(this,this.onButtonBookmark);
  1419.         this.btnNote.onclick = $bind(this,this.onButtonNoteClick);
  1420.         this.btnAboutUs.onclick = $bind(this,this.onAboutUsClick);
  1421.         this.btnAutoFlip.onclick = $bind(this,this.onAutoFlipClick);
  1422.     }
  1423.     ,getBookmarkContext: function() {
  1424.         return this.cvsBookmark.getContext("2d");
  1425.     }
  1426.     ,getNoteContext: function() {
  1427.         return this.cvsNote.getContext("2d");
  1428.     }
  1429.     ,getHighLightContext: function() {
  1430.         return this.cvsHighLight.getContext("2d");
  1431.     }
  1432.     ,getButtonContext: function() {
  1433.         return this.cvsButton.getContext("2d");
  1434.     }
  1435.     ,getContext: function() {
  1436.         return this.canvas.getContext("2d");
  1437.     }
  1438.     ,getZoomOutCSS: function() {
  1439.         return this.zoomCSS + "-webkit-transform:scale(" + 1 + " );-webkit-transition: all 500ms ;" + "-moz-transform:scale(" + 1 + ");-moz-transition: all 500ms ;" + "top:" + 0 + "px;left:" + 0 + "px;";
  1440.     }
  1441.     ,getZoomInMoveCSS: function(x,y,atonce) {
  1442.         if(atonce) return this.zoomCSS + "-webkit-transform:scale(" + this.zoomLevel + " );-webkit-transition: all 0ms ;" + "-moz-transform:scale(" + this.zoomLevel + " ) ; -moz-transition: all 0ms ;" + "top:" + (this.currentOrgY + y | 0) + "px;left:" + (this.currentOrgX + x | 0) + "px;"; else return this.zoomCSS + "-webkit-transform:scale(" + this.zoomLevel + " );-webkit-transition: all 500ms ;" + "-moz-transform:scale(" + this.zoomLevel + " ) ; -moz-transition: all 500ms ;" + "top:" + (this.currentOrgY + y | 0) + "px;left:" + (this.currentOrgX + x | 0) + "px;";
  1443.     }
  1444.     ,getZoomInCSS: function() {
  1445.         return this.zoomCSS + "-webkit-transform:scale(" + this.zoomLevel + " );-webkit-transition: all 500ms ;" + "-moz-transform:scale(" + this.zoomLevel + ");-moz-transition: all 500ms ;";
  1446.     }
  1447.     ,requestMainAd: function() {
  1448.     }
  1449.     ,resetCSS: function() {
  1450.         this.moveDX = 0;
  1451.         this.moveDY = 0;
  1452.         this.currentOrgX = 0;
  1453.         this.currentOrgY = 0;
  1454.     }
  1455.     ,__class__: FlipBook
  1456. }
  1457. var DoubleFlipBook = function() {
  1458.     this.mainAdLayout = "center";
  1459.     this.mainAdDockPos = "halfpage";
  1460.     FlipBook.call(this);
  1461. };
  1462. DoubleFlipBook.__name__ = true;
  1463. DoubleFlipBook.__super__ = FlipBook;
  1464. DoubleFlipBook.prototype = $extend(FlipBook.prototype,{
  1465.     loadCtxNotes: function() {
  1466.         var pair = this.getCurrentPair();
  1467.         var notes = new Array();
  1468.         if(RunTime.book != null && RunTime.book.notes != null) {
  1469.             var _g1 = 0, _g = RunTime.book.notes.length;
  1470.             while(_g1 < _g) {
  1471.                 var i = _g1++;
  1472.                 var item = RunTime.book.notes[i];
  1473.                 var match = pair.match(item.pageNum);
  1474.                 if(match != 0) {
  1475.                     item.pageLayoutType = match;
  1476.                     notes.push(item);
  1477.                 }
  1478.             }
  1479.         }
  1480.         this.bookContext.notes = notes;
  1481.     }
  1482.     ,loadCtxHighLights: function() {
  1483.         var pair = this.getCurrentPair();
  1484.         var highlights = new Array();
  1485.         if(RunTime.book != null && RunTime.book.highlights != null) {
  1486.             var _g1 = 0, _g = RunTime.book.highlights.length;
  1487.             while(_g1 < _g) {
  1488.                 var i = _g1++;
  1489.                 var item = RunTime.book.highlights[i];
  1490.                 var match = pair.match(item.pageNum);
  1491.                 if(match != 0) {
  1492.                     item.pageLayoutType = match;
  1493.                     highlights.push(item);
  1494.                 }
  1495.             }
  1496.         }
  1497.         this.bookContext.highlights = highlights;
  1498.     }
  1499.     ,loadCtxButtons: function() {
  1500.         var buttons = new Array();
  1501.         if(RunTime.book != null && RunTime.book.buttons != null) {
  1502.             var pair = this.getCurrentPair();
  1503.             var _g1 = 0, _g = RunTime.book.buttons.length;
  1504.             while(_g1 < _g) {
  1505.                 var i = _g1++;
  1506.                 var item = RunTime.book.buttons[i];
  1507.                 var match = pair.match(item.pageNum);
  1508.                 if(match != 0 && item.layer == "onpage") {
  1509.                     item.pageLayoutType = match;
  1510.                     buttons.push(item);
  1511.                 } else if(item.layer == "foreground") {
  1512.                     if((item.pageNum + 1) % 2 != 0) item.pageLayoutType = 1; else item.pageLayoutType = -1;
  1513.                     buttons.push(item);
  1514.                 } else if(item.layer == "background") {
  1515.                     if(pair.leftPage == null && (item.pageNum + 1) % 2 == 0) {
  1516.                         item.pageLayoutType = -1;
  1517.                         buttons.push(item);
  1518.                     }
  1519.                     if(pair.rightPage == null && (item.pageNum + 1) % 2 != 0) {
  1520.                         item.pageLayoutType = 1;
  1521.                         buttons.push(item);
  1522.                     }
  1523.                 }
  1524.             }
  1525.         }
  1526.         this.bookContext.buttons = buttons;
  1527.     }
  1528.     ,canTurnRight: function() {
  1529.         var num = this.getCurrentPageNum();
  1530.         var count = RunTime.book.pages.length;
  1531.         if(num % 2 == 1) num++;
  1532.         return num < count - 1;
  1533.     }
  1534.     ,showPopupAudio: function(item) {
  1535.         item.url = item.destination;
  1536.         var pageNum = item.pageNum;
  1537.         var audio = new core.AudioInfo();
  1538.         audio.pageNum = pageNum;
  1539.         audio.url = item.destination;
  1540.         if(pageNum % 2 == 1) {
  1541.             this.cvsLeftPageBgAudio.innerHTML = "";
  1542.             this.cvsLeftPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audio,true);
  1543.             var item1 = js.Lib.document.getElementById("cvsLeftPageBgAudio").getElementsByTagName("audio")[0];
  1544.             item1.play();
  1545.         } else {
  1546.             this.cvsRightPageBgAudio.innerHTML = "";
  1547.             this.cvsRightPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audio,false);
  1548.             var item1 = js.Lib.document.getElementById("cvsRightPageBgAudio").getElementsByTagName("audio")[0];
  1549.             item1.play();
  1550.         }
  1551.     }
  1552.     ,turnPage: function(pageOffset) {
  1553.         var current = 0;
  1554.         if(this.currentPageNum != null) current = this.currentPageNum;
  1555.         if(RunTime.book.rightToLeft) pageOffset = 0 - pageOffset;
  1556.         current = current + pageOffset * 2;
  1557.         if(current < 0) current = 0;
  1558.         if(current >= RunTime.book.pages.length) current = RunTime.book.pages.length - 1;
  1559.         this.turnToPage(current);
  1560.     }
  1561.     ,setCurrentPage: function(val) {
  1562.         var count = RunTime.book.pages.length;
  1563.         var t = this.tbPage;
  1564.         if(val == 1) {
  1565.             t.value = Std.string(val);
  1566.             this.leftPageNum = -1;
  1567.             this.rightPageNum = val;
  1568.         } else if(val % 2 == 0 && val == count) {
  1569.             t.value = Std.string(val);
  1570.             this.leftPageNum = val;
  1571.             this.rightPageNum = -1;
  1572.         } else {
  1573.             var v0 = val - val % 2;
  1574.             var v1 = v0 + 1;
  1575.             this.leftPageNum = v0;
  1576.             this.rightPageNum = v1;
  1577.             t.value = Std.string(v0) + "-" + Std.string(v1);
  1578.         }
  1579.     }
  1580.     ,loadCtxVideos: function() {
  1581.         var videos = new Array();
  1582.         if(RunTime.book != null && RunTime.book.videos != null) {
  1583.             var pair = this.getCurrentPair();
  1584.             var _g1 = 0, _g = RunTime.book.videos.length;
  1585.             while(_g1 < _g) {
  1586.                 var i = _g1++;
  1587.                 var item = RunTime.book.videos[i];
  1588.                 var match = pair.match(item.pageNum);
  1589.                 if(match != 0) {
  1590.                     item.pageLayoutType = match;
  1591.                     videos.push(item);
  1592.                 }
  1593.             }
  1594.         }
  1595.         this.bookContext.videos = videos;
  1596.     }
  1597.     ,loadCtxHotlinks: function() {
  1598.         var links = new Array();
  1599.         if(RunTime.book != null && RunTime.book.hotlinks != null) {
  1600.             var pair = this.getCurrentPair();
  1601.             var _g1 = 0, _g = RunTime.book.hotlinks.length;
  1602.             while(_g1 < _g) {
  1603.                 var i = _g1++;
  1604.                 var item = RunTime.book.hotlinks[i];
  1605.                 var match = pair.match(item.pageNum);
  1606.                 if(match != 0) {
  1607.                     item.pageLayoutType = match;
  1608.                     links.push(item);
  1609.                 }
  1610.             }
  1611.         }
  1612.         this.bookContext.hotlinks = links;
  1613.     }
  1614.     ,loadCtxSlideshow: function() {
  1615.         var slides = new Array();
  1616.         if(RunTime.book != null && RunTime.book.slideshows != null) {
  1617.             var pair = this.getCurrentPair();
  1618.             var _g1 = 0, _g = RunTime.book.slideshows.length;
  1619.             while(_g1 < _g) {
  1620.                 var i = _g1++;
  1621.                 var item = RunTime.book.slideshows[i];
  1622.                 var match = pair.match(item.pageNum);
  1623.                 if(match != 0) {
  1624.                     item.pageLayoutType = match;
  1625.                     slides.push(item);
  1626.                 }
  1627.             }
  1628.         }
  1629.         this.bookContext.slideshow = slides;
  1630.         this.updateSlideshow();
  1631.     }
  1632.     ,zoomAt: function(point0,point1) {
  1633.         var num = 0;
  1634.         if(this.currentPageNum != null) num = this.currentPageNum;
  1635.         var pair = this.getCurrentPair();
  1636.         if(point0 == null || point1 == null) this.pageZoomOut(); else this.pageZoomIn(pair,point0,point1);
  1637.     }
  1638.     ,pageZoomIn: function(page,point0,point1) {
  1639.         if(page == null) return;
  1640.         if(page.leftPage != null) {
  1641.             if(!page.leftPage.locked) this.zoomLeftPage.src = page.leftPage.getBigPageUrl(); else {
  1642.             }
  1643.             this.zoomLeftPage.style.display = "block";
  1644.         }
  1645.         if(page.rightPage != null) {
  1646.             if(!page.rightPage.locked) this.zoomRightPage.src = page.rightPage.getBigPageUrl(); else {
  1647.             }
  1648.             this.zoomRightPage.style.display = "block";
  1649.         }
  1650.     }
  1651.     ,pageZoomOut: function() {
  1652.         this.page_offsetX = 0;
  1653.         this.page_offsetY = 0;
  1654.     }
  1655.     ,getCurrentPair: function() {
  1656.         var current = 0;
  1657.         if(this.currentPageNum != null) current = this.currentPageNum;
  1658.         return new core.PagePair(current);
  1659.     }
  1660.     ,getRealValue: function(value) {
  1661.         if(value == null || value == "") return 0;
  1662.         return Std.parseInt(value.substring(0,value.lastIndexOf("px")));
  1663.     }
  1664.     ,updateAds: function() {
  1665.         try {
  1666.             if(this.currentPageNum == 0) this.mainAdHtml.style.display = "block"; else this.mainAdHtml.style.display = "none";
  1667.         } catch( ex ) {
  1668.         }
  1669.     }
  1670.     ,requestMainAd: function() {
  1671.         this.mainAdHtml = js.Lib.document.getElementById("mainAdhtml");
  1672.         var an = js.Lib.document.getElementById("mainAdInner");
  1673.         this.mainAdInner = an;
  1674.         var img = js.Lib.document.getElementById("mainAdimg");
  1675.         this.mainAdImg = img;
  1676.         try {
  1677.             var ad = null;
  1678.             try {
  1679.                 ad = new haxe.xml.Fast(RunTime.bookInfo.firstElement().elementsNamed("mainAd").next());
  1680.             } catch( e ) {
  1681.             }
  1682.             if(ad != null) {
  1683.                 if(ad.has.resolve("dockPos")) this.mainAdDockPos = ad.att.resolve("dockPos");
  1684.                 this.mainAdHtml.style.display = "block";
  1685.                 this.mainAdHtml.style.marginRight = 0;
  1686.                 this.mainAdHtml.style.height = RunTime.clientHeight + "px";
  1687.                 if(this.mainAdDockPos == "halfpage") {
  1688.                     this.mainAdHtml.style.width = RunTime.imagePageWidth + "px";
  1689.                     this.mainAdHtml.style.left = RunTime.clientWidth / 2 - RunTime.imagePageWidth + "px";
  1690.                     this.mainAdHtml.style.right = RunTime.clientWidth / 2 + "px";
  1691.                 } else if(this.mainAdDockPos == "halfscreen") {
  1692.                     this.mainAdHtml.style.left = "0px";
  1693.                     this.mainAdHtml.style.width = RunTime.clientWidth / 2 + "px";
  1694.                 }
  1695.                 var isHtmlAD = false;
  1696.                 try {
  1697.                     if(ad.getInnerData() != null && StringTools.trim(ad.getInnerData()) != "") isHtmlAD = true;
  1698.                 } catch( err ) {
  1699.                 }
  1700.                 if(isHtmlAD) {
  1701.                     this.mainAdHtml.style.overflow = "hide";
  1702.                     this.mainAdHtml.innerHTML = ad.getInnerData();
  1703.                 } else if(ad.has.resolve("url")) {
  1704.                     this.mainAdImg.src = ad.att.resolve("url");
  1705.                     if(ad.has.resolve("layout")) this.mainAdLayout = ad.att.resolve("layout");
  1706.                     if(ad.has.resolve("href")) {
  1707.                         this.mainAdHref = ad.att.resolve("href");
  1708.                         this.mainAdInner.href = this.mainAdHref;
  1709.                         this.mainAdInner.target = ad.has.resolve("target")?ad.att.resolve("target"):"_blank";
  1710.                     }
  1711.                     if(this.mainAdLayout == "center") {
  1712.                         this.mainAdInner.style.top = (RunTime.clientHeight - this.getRealValue(this.mainAdImg.style.height)) / 4 + "px";
  1713.                         this.mainAdInner.style.verticalAlign = "middle";
  1714.                         this.mainAdInner.style.textAlign = "right";
  1715.                         this.mainAdImg.style.maxHeight = this.mainAdHtml.style.height;
  1716.                         this.mainAdImg.style.maxWidth = this.mainAdHtml.style.width;
  1717.                     } else if(this.mainAdLayout == "stretch") {
  1718.                         this.mainAdImg.style.height = this.mainAdHtml.style.height;
  1719.                         this.mainAdImg.style.width = this.mainAdHtml.style.width;
  1720.                     } else if(this.mainAdLayout == "kk") {
  1721.                         this.mainAdImg.style.height = "300px";
  1722.                         this.mainAdImg.style.width = "300px";
  1723.                     } else {
  1724.                         this.mainAdInner.style.top = (RunTime.clientHeight - this.getRealValue(this.mainAdImg.style.height)) / 4 + "px";
  1725.                         this.mainAdInner.style.verticalAlign = "middle";
  1726.                         this.mainAdInner.style.textAlign = "right";
  1727.                         this.mainAdImg.style.maxHeight = this.mainAdHtml.style.height;
  1728.                         this.mainAdImg.style.maxWidth = this.mainAdHtml.style.width;
  1729.                     }
  1730.                 }
  1731.             }
  1732.             this.updateAds();
  1733.         } catch( e ) {
  1734.             js.Lib.alert(e);
  1735.         }
  1736.     }
  1737.     ,turnToPage: function(pageNum) {
  1738.         var _g = this;
  1739.         this.preloadPages(pageNum);
  1740.         var current = this.getCurrentPageNum();
  1741.         if(current < 0 || current >= RunTime.book.pages.length) return;
  1742.         if(pageNum < 0 || pageNum >= RunTime.book.pages.length) return;
  1743.         var oldPair = new core.PagePair(current);
  1744.         var newPair = new core.PagePair(pageNum);
  1745.         var oldNum = oldPair.getNumInDoubleMode();
  1746.         var newNum = newPair.getNumInDoubleMode();
  1747.         if(newNum < 0 || oldNum == newNum) return;
  1748.         this.bookContext.removeAllPages();
  1749.         this.bookContext.resetLayoutParams();
  1750.         this.setCurrentPage(pageNum + 1);
  1751.         this.bookContext.addPage(oldPair.leftPage);
  1752.         this.bookContext.addPage(oldPair.rightPage);
  1753.         this.bookContext.addPage(newPair.leftPage);
  1754.         this.bookContext.addPage(newPair.rightPage);
  1755.         if(newPair.leftPage != null) RunTime.logPageView(newPair.leftPage.num + 1);
  1756.         if(newPair.rightPage != null) RunTime.logPageView(newPair.rightPage.num + 1);
  1757.         this.bookContext.pageOffset = 0;
  1758.         var pageOffset = 0;
  1759.         var offset = 0;
  1760.         var dstPageOffset = newNum > oldNum?1:-1;
  1761.         var ldp = RunTime.getDrawParams(-1);
  1762.         var rdp = RunTime.getDrawParams(1);
  1763.         var update = function(val) {
  1764.             var downLeft = oldPair.leftPage;
  1765.             var downRight = oldPair.rightPage;
  1766.             var upLeft = newPair.leftPage;
  1767.             var upRight = newPair.rightPage;
  1768.             if(dstPageOffset > 0) {
  1769.                 if(RunTime.book.rightToLeft) {
  1770.                     if(downLeft != null) {
  1771.                         if(val <= 0.5) downLeft.drawParams = ldp; else downLeft.drawParams = ldp.sliceRight(2 - val * 2);
  1772.                     }
  1773.                     if(downRight != null) {
  1774.                     }
  1775.                     if(upLeft != null) upLeft.drawParams = ldp.sliceRight(val,-ldp.dw * 2 * (1 - val));
  1776.                     if(upRight != null) upRight.drawParams = rdp.sliceLeft(val);
  1777.                 } else {
  1778.                     if(downLeft != null) {
  1779.                         if(val <= 0.5) downLeft.drawParams = ldp; else downLeft.drawParams = ldp.sliceLeft(2 - val * 2);
  1780.                     }
  1781.                     if(downRight != null) {
  1782.                     }
  1783.                     if(upLeft != null) upLeft.drawParams = ldp.sliceLeft(val,ldp.dw * 2 * (1 - val));
  1784.                     if(upRight != null) upRight.drawParams = rdp.sliceRight(val);
  1785.                 }
  1786.             } else {
  1787.                 val = -val;
  1788.                 if(RunTime.book.rightToLeft) {
  1789.                     if(downLeft != null) {
  1790.                         if(val <= 0.5) downLeft.drawParams = ldp.sliceLeft(1 - 2 * val); else downLeft.drawParams = null;
  1791.                     }
  1792.                     if(downRight != null) {
  1793.                         if(val <= 0.5) downRight.drawParams = rdp; else downRight.drawParams = rdp.sliceLeft(2 - val * 2);
  1794.                     }
  1795.                     if(upLeft != null) upLeft.drawParams = ldp.sliceRight(val);
  1796.                     if(upRight != null) upRight.drawParams = rdp.sliceLeft(val,rdp.dw * 2 * (1 - val));
  1797.                 } else {
  1798.                     if(downLeft != null) {
  1799.                         if(val <= 0.5) downLeft.drawParams = ldp.sliceRight(1 - 2 * val); else downLeft.drawParams = null;
  1800.                     }
  1801.                     if(downRight != null) {
  1802.                         if(val <= 0.5) downRight.drawParams = rdp; else downRight.drawParams = rdp.sliceRight(2 - val * 2);
  1803.                     }
  1804.                     if(upLeft != null) upLeft.drawParams = ldp.sliceLeft(val);
  1805.                     if(upRight != null) upRight.drawParams = rdp.sliceRight(val,-rdp.dw * 2 * (1 - val));
  1806.                 }
  1807.             }
  1808.         };
  1809.         update(0);
  1810.         if(this.tweener != null) this.tweener.stop();
  1811.         var self = this;
  1812.         var ctx = this.bookContext;
  1813.         var maxCount = 8;
  1814.         this.tweener.onChange = function(count) {
  1815.             var ratio = count / maxCount;
  1816.             offset = dstPageOffset * ratio * ratio * ratio;
  1817.             update(offset);
  1818.             if(count == maxCount) {
  1819.                 ctx.clear(true);
  1820.                 ctx.addPage(newPair.leftPage);
  1821.                 ctx.addPage(newPair.rightPage);
  1822.                 self.currentPageNum = pageNum;
  1823.                 self.loadCtxHotlinks();
  1824.                 self.loadCtxSlideshow();
  1825.                 self.loadCtxButtons();
  1826.                 self.loadCtxHighLights();
  1827.                 self.loadCtxNotes();
  1828.                 self.loadCurrentBookmark();
  1829.                 self.updateVideos();
  1830.                 self.onEnterPage();
  1831.                 RunTime.flipBook.rightPageLock.style.display = "none";
  1832.                 RunTime.flipBook.leftPageLock.style.display = "none";
  1833.                 if(newPair.rightPage != null && newPair.rightPage.locked && RunTime.bLocked) RunTime.flipBook.rightPageLock.style.display = "block";
  1834.                 if(newPair.leftPage != null && newPair.leftPage.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1835.             }
  1836.             self.bookContext.render();
  1837.             _g.updateAds();
  1838.         };
  1839.         this.clearCtxHotlinks();
  1840.         this.clearCtxButtons();
  1841.         this.clearCtxNote();
  1842.         this.clearCtxHighLight();
  1843.         this.clearVideos();
  1844.         this.clearSlideshow();
  1845.         this.tweener.start(maxCount | 0);
  1846.         this.hideTopBar();
  1847.     }
  1848.     ,getCurrentPageAudios: function() {
  1849.         var audios = RunTime.book.audios;
  1850.         var match = { left : null, right : null};
  1851.         var lftPg = -1;
  1852.         var rtPg = -1;
  1853.         var p = this.getCurrentPair();
  1854.         if(p.leftPage != null) lftPg = p.leftPage.num;
  1855.         if(p.rightPage != null) rtPg = p.rightPage.num;
  1856.         var _g1 = 0, _g = audios.length;
  1857.         while(_g1 < _g) {
  1858.             var i = _g1++;
  1859.             var item = audios[i];
  1860.             if(item.pageNum == lftPg) match.left = item; else if(item.pageNum == rtPg) match.right = item;
  1861.         }
  1862.         return match;
  1863.     }
  1864.     ,getFullText: function(pages) {
  1865.         var lftPg = -1;
  1866.         var rtPg = -1;
  1867.         var p = this.getCurrentPair();
  1868.         if(p.leftPage != null) lftPg = p.leftPage.num;
  1869.         if(p.rightPage != null) rtPg = p.rightPage.num;
  1870.         if(lftPg > rtPg) {
  1871.             var tmp = rtPg;
  1872.             rtPg = lftPg;
  1873.             lftPg = tmp;
  1874.         }
  1875.         var result = "";
  1876.         var _g1 = 0, _g = pages.length;
  1877.         while(_g1 < _g) {
  1878.             var i = _g1++;
  1879.             var item = pages[i];
  1880.             if(item.num == lftPg) {
  1881.                 result += "<br />";
  1882.                 result += "<br />";
  1883.                 result += "==== Page " + Std.string(lftPg + 1) + " ====";
  1884.                 result += "<br />";
  1885.                 result += "<br />";
  1886.                 result += item.content;
  1887.                 result += "<br />";
  1888.                 result += "<br />";
  1889.             } else if(item.num == rtPg) {
  1890.                 result += "<br />";
  1891.                 result += "<br />";
  1892.                 result += "==== Page " + Std.string(rtPg + 1) + " ====";
  1893.                 result += "<br />";
  1894.                 result += "<br />";
  1895.                 result += item.content;
  1896.                 result += "<br />";
  1897.                 result += "<br />";
  1898.             }
  1899.         }
  1900.         result = StringTools.replace(result,"\n","<br />");
  1901.         return result;
  1902.     }
  1903.     ,loadPage: function(index) {
  1904.         this.preloadPages(index);
  1905.         this.currentPageNum = index;
  1906.         this.loadCtxHotlinks();
  1907.         this.loadCtxSlideshow();
  1908.         this.loadCtxButtons();
  1909.         this.loadCtxHighLights();
  1910.         this.loadCtxNotes();
  1911.         this.loadCurrentBookmark();
  1912.         this.updateVideos();
  1913.         var p = this.getCurrentPair();
  1914.         this.bookContext.addPage(p.leftPage);
  1915.         this.bookContext.addPage(p.rightPage);
  1916.         if(p.rightPage != null && p.rightPage.locked && RunTime.bLocked) RunTime.flipBook.rightPageLock.style.display = "block";
  1917.         if(p.leftPage != null && p.leftPage.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1918.         this.bookContext.render();
  1919.         if(p.leftPage != null) RunTime.logPageView(p.leftPage.num + 1);
  1920.         if(p.rightPage != null) RunTime.logPageView(p.rightPage.num + 1);
  1921.         this.onEnterPage();
  1922.         if(index != null) this.updateAds();
  1923.     }
  1924.     ,checkCanZoom: function() {
  1925.         var p = this.getCurrentPair();
  1926.         if(p.leftPage != null) {
  1927.             if(!p.leftPage.canZoom) return false;
  1928.         }
  1929.         if(p.rightPage != null) {
  1930.             if(!p.rightPage.canZoom) return false;
  1931.         }
  1932.         return true;
  1933.     }
  1934.     ,afterInit: function() {
  1935.         this.tbPage.style.width = "60px";
  1936.     }
  1937.     ,__class__: DoubleFlipBook
  1938. });
  1939. var EReg = function(r,opt) {
  1940.     opt = opt.split("u").join("");
  1941.     this.r = new RegExp(r,opt);
  1942. };
  1943. EReg.__name__ = true;
  1944. EReg.prototype = {
  1945.     customReplace: function(s,f) {
  1946.         var buf = new StringBuf();
  1947.         while(true) {
  1948.             if(!this.match(s)) break;
  1949.             buf.b += Std.string(this.matchedLeft());
  1950.             buf.b += Std.string(f(this));
  1951.             s = this.matchedRight();
  1952.         }
  1953.         buf.b += Std.string(s);
  1954.         return buf.b;
  1955.     }
  1956.     ,replace: function(s,by) {
  1957.         return s.replace(this.r,by);
  1958.     }
  1959.     ,split: function(s) {
  1960.         var d = "#__delim__#";
  1961.         return s.replace(this.r,d).split(d);
  1962.     }
  1963.     ,matchedPos: function() {
  1964.         if(this.r.m == null) throw "No string matched";
  1965.         return { pos : this.r.m.index, len : this.r.m[0].length};
  1966.     }
  1967.     ,matchedRight: function() {
  1968.         if(this.r.m == null) throw "No string matched";
  1969.         var sz = this.r.m.index + this.r.m[0].length;
  1970.         return this.r.s.substr(sz,this.r.s.length - sz);
  1971.     }
  1972.     ,matchedLeft: function() {
  1973.         if(this.r.m == null) throw "No string matched";
  1974.         return this.r.s.substr(0,this.r.m.index);
  1975.     }
  1976.     ,matched: function(n) {
  1977.         return this.r.m != null && n >= 0 && n < this.r.m.length?this.r.m[n]:(function($this) {
  1978.             var $r;
  1979.             throw "EReg::matched";
  1980.             return $r;
  1981.         }(this));
  1982.     }
  1983.     ,match: function(s) {
  1984.         if(this.r.global) this.r.lastIndex = 0;
  1985.         this.r.m = this.r.exec(s);
  1986.         this.r.s = s;
  1987.         return this.r.m != null;
  1988.     }
  1989.     ,__class__: EReg
  1990. }
  1991. var Hash = function() {
  1992.     this.h = { };
  1993. };
  1994. Hash.__name__ = true;
  1995. Hash.prototype = {
  1996.     toString: function() {
  1997.         var s = new StringBuf();
  1998.         s.b += Std.string("{");
  1999.         var it = this.keys();
  2000.         while( it.hasNext() ) {
  2001.             var i = it.next();
  2002.             s.b += Std.string(i);
  2003.             s.b += Std.string(" => ");
  2004.             s.b += Std.string(Std.string(this.get(i)));
  2005.             if(it.hasNext()) s.b += Std.string(", ");
  2006.         }
  2007.         s.b += Std.string("}");
  2008.         return s.b;
  2009.     }
  2010.     ,iterator: function() {
  2011.         return { ref : this.h, it : this.keys(), hasNext : function() {
  2012.             return this.it.hasNext();
  2013.         }, next : function() {
  2014.             var i = this.it.next();
  2015.             return this.ref["$" + i];
  2016.         }};
  2017.     }
  2018.     ,keys: function() {
  2019.         var a = [];
  2020.         for( var key in this.h ) {
  2021.         if(this.h.hasOwnProperty(key)) a.push(key.substr(1));
  2022.         }
  2023.         return HxOverrides.iter(a);
  2024.     }
  2025.     ,remove: function(key) {
  2026.         key = "$" + key;
  2027.         if(!this.h.hasOwnProperty(key)) return false;
  2028.         delete(this.h[key]);
  2029.         return true;
  2030.     }
  2031.     ,exists: function(key) {
  2032.         return this.h.hasOwnProperty("$" + key);
  2033.     }
  2034.     ,get: function(key) {
  2035.         return this.h["$" + key];
  2036.     }
  2037.     ,set: function(key,value) {
  2038.         this.h["$" + key] = value;
  2039.     }
  2040.     ,__class__: Hash
  2041. }
  2042. var HtmlDomHelper = function() { }
  2043. HtmlDomHelper.__name__ = true;
  2044. HtmlDomHelper.setTopBarDefaultSize = function(dom) {
  2045.     dom.style.width = "500px";
  2046.     dom.style.left = Std.string((RunTime.clientWidth - 500) / 2 | 0) + "px";
  2047. }
  2048. HtmlDomHelper.setTopBarMaxSize = function(dom) {
  2049.     dom.style.width = Std.string(RunTime.clientWidth | 0) + "px";
  2050.     dom.style.left = "0px";
  2051. }
  2052. HtmlDomHelper.setTopFullTextContentMaxSize = function(dom) {
  2053.     dom.style.width = Std.string((RunTime.clientWidth | 0) - 20) + "px";
  2054.     dom.style.top = "35px";
  2055.     dom.style.height = Std.string((RunTime.clientHeight | 0) - 80) + "px";
  2056.     dom.style.left = "0px";
  2057. }
  2058. var HxOverrides = function() { }
  2059. HxOverrides.__name__ = true;
  2060. HxOverrides.dateStr = function(date) {
  2061.     var m = date.getMonth() + 1;
  2062.     var d = date.getDate();
  2063.     var h = date.getHours();
  2064.     var mi = date.getMinutes();
  2065.     var s = date.getSeconds();
  2066.     return date.getFullYear() + "-" + (m < 10?"0" + m:"" + m) + "-" + (d < 10?"0" + d:"" + d) + " " + (h < 10?"0" + h:"" + h) + ":" + (mi < 10?"0" + mi:"" + mi) + ":" + (s < 10?"0" + s:"" + s);
  2067. }
  2068. HxOverrides.strDate = function(s) {
  2069.     switch(s.length) {
  2070.     case 8:
  2071.         var k = s.split(":");
  2072.         var d = new Date();
  2073.         d.setTime(0);
  2074.         d.setUTCHours(k[0]);
  2075.         d.setUTCMinutes(k[1]);
  2076.         d.setUTCSeconds(k[2]);
  2077.         return d;
  2078.     case 10:
  2079.         var k = s.split("-");
  2080.         return new Date(k[0],k[1] - 1,k[2],0,0,0);
  2081.     case 19:
  2082.         var k = s.split(" ");
  2083.         var y = k[0].split("-");
  2084.         var t = k[1].split(":");
  2085.         return new Date(y[0],y[1] - 1,y[2],t[0],t[1],t[2]);
  2086.     default:
  2087.         throw "Invalid date format : " + s;
  2088.     }
  2089. }
  2090. HxOverrides.cca = function(s,index) {
  2091.     var x = s.charCodeAt(index);
  2092.     if(x != x) return undefined;
  2093.     return x;
  2094. }
  2095. HxOverrides.substr = function(s,pos,len) {
  2096.     if(pos != null && pos != 0 && len != null && len < 0) return "";
  2097.     if(len == null) len = s.length;
  2098.     if(pos < 0) {
  2099.         pos = s.length + pos;
  2100.         if(pos < 0) pos = 0;
  2101.     } else if(len < 0) len = s.length + len - pos;
  2102.     return s.substr(pos,len);
  2103. }
  2104. HxOverrides.remove = function(a,obj) {
  2105.     var i = 0;
  2106.     var l = a.length;
  2107.     while(i < l) {
  2108.         if(a[i] == obj) {
  2109.             a.splice(i,1);
  2110.             return true;
  2111.         }
  2112.         i++;
  2113.     }
  2114.     return false;
  2115. }
  2116. HxOverrides.iter = function(a) {
  2117.     return { cur : 0, arr : a, hasNext : function() {
  2118.         return this.cur < this.arr.length;
  2119.     }, next : function() {
  2120.         return this.arr[this.cur++];
  2121.     }};
  2122. }
  2123. var IntIter = function(min,max) {
  2124.     this.min = min;
  2125.     this.max = max;
  2126. };
  2127. IntIter.__name__ = true;
  2128. IntIter.prototype = {
  2129.     next: function() {
  2130.         return this.min++;
  2131.     }
  2132.     ,hasNext: function() {
  2133.         return this.min < this.max;
  2134.     }
  2135.     ,__class__: IntIter
  2136. }
  2137. var L = function() { }
  2138. L.__name__ = true;
  2139. L.s = function(key,dftVal) {
  2140.     if(L.instance.exists(key) == false) return dftVal != null?dftVal:key; else return L.instance.get(key);
  2141. }
  2142. L.loadRemote = function(url,onSuccess,onError) {
  2143.     orc.utils.Util.request(url,function(data) {
  2144.         var xml = Xml.parse(data);
  2145.         L.loadXml(xml);
  2146.         if(onSuccess != null) onSuccess();
  2147.     },onError);
  2148. }
  2149. L.loadXml = function(xml) {
  2150.     if(xml == null) return;
  2151.     var i = xml.elementsNamed("lang");
  2152.     if(i.hasNext() == false) return;
  2153.     xml = i.next();
  2154.     i = xml.elementsNamed("item");
  2155.     while(i.hasNext() == true) {
  2156.         var node = i.next();
  2157.         var key = node.get("key");
  2158.         var val = node.get("value");
  2159.         L.instance.set(key,val);
  2160.     }
  2161. }
  2162. var List = function() {
  2163.     this.length = 0;
  2164. };
  2165. List.__name__ = true;
  2166. List.prototype = {
  2167.     map: function(f) {
  2168.         var b = new List();
  2169.         var l = this.h;
  2170.         while(l != null) {
  2171.             var v = l[0];
  2172.             l = l[1];
  2173.             b.add(f(v));
  2174.         }
  2175.         return b;
  2176.     }
  2177.     ,filter: function(f) {
  2178.         var l2 = new List();
  2179.         var l = this.h;
  2180.         while(l != null) {
  2181.             var v = l[0];
  2182.             l = l[1];
  2183.             if(f(v)) l2.add(v);
  2184.         }
  2185.         return l2;
  2186.     }
  2187.     ,join: function(sep) {
  2188.         var s = new StringBuf();
  2189.         var first = true;
  2190.         var l = this.h;
  2191.         while(l != null) {
  2192.             if(first) first = false; else s.b += Std.string(sep);
  2193.             s.b += Std.string(l[0]);
  2194.             l = l[1];
  2195.         }
  2196.         return s.b;
  2197.     }
  2198.     ,toString: function() {
  2199.         var s = new StringBuf();
  2200.         var first = true;
  2201.         var l = this.h;
  2202.         s.b += Std.string("{");
  2203.         while(l != null) {
  2204.             if(first) first = false; else s.b += Std.string(", ");
  2205.             s.b += Std.string(Std.string(l[0]));
  2206.             l = l[1];
  2207.         }
  2208.         s.b += Std.string("}");
  2209.         return s.b;
  2210.     }
  2211.     ,iterator: function() {
  2212.         return { h : this.h, hasNext : function() {
  2213.             return this.h != null;
  2214.         }, next : function() {
  2215.             if(this.h == null) return null;
  2216.             var x = this.h[0];
  2217.             this.h = this.h[1];
  2218.             return x;
  2219.         }};
  2220.     }
  2221.     ,remove: function(v) {
  2222.         var prev = null;
  2223.         var l = this.h;
  2224.         while(l != null) {
  2225.             if(l[0] == v) {
  2226.                 if(prev == null) this.h = l[1]; else prev[1] = l[1];
  2227.                 if(this.q == l) this.q = prev;
  2228.                 this.length--;
  2229.                 return true;
  2230.             }
  2231.             prev = l;
  2232.             l = l[1];
  2233.         }
  2234.         return false;
  2235.     }
  2236.     ,clear: function() {
  2237.         this.h = null;
  2238.         this.q = null;
  2239.         this.length = 0;
  2240.     }
  2241.     ,isEmpty: function() {
  2242.         return this.h == null;
  2243.     }
  2244.     ,pop: function() {
  2245.         if(this.h == null) return null;
  2246.         var x = this.h[0];
  2247.         this.h = this.h[1];
  2248.         if(this.h == null) this.q = null;
  2249.         this.length--;
  2250.         return x;
  2251.     }
  2252.     ,last: function() {
  2253.         return this.q == null?null:this.q[0];
  2254.     }
  2255.     ,first: function() {
  2256.         return this.h == null?null:this.h[0];
  2257.     }
  2258.     ,push: function(item) {
  2259.         var x = [item,this.h];
  2260.         this.h = x;
  2261.         if(this.q == null) this.q = x;
  2262.         this.length++;
  2263.     }
  2264.     ,add: function(item) {
  2265.         var x = [item];
  2266.         if(this.h == null) this.h = x; else this.q[1] = x;
  2267.         this.q = x;
  2268.         this.length++;
  2269.     }
  2270.     ,__class__: List
  2271. }
  2272. var Main = function() { }
  2273. Main.__name__ = true;
  2274. Main.main = function() {
  2275.     if(js.Lib.document.getElementById("cvsBook") == null) Zoom.Load(); else RunTime.init();
  2276. }
  2277. Main.testCss = function() {
  2278.     var t = new core.Tweener();
  2279.     var max = 20;
  2280.     var cvs = js.Lib.document.getElementById("img");
  2281.     t.onChange = function(count) {
  2282.         var l = Std.string(count * 30);
  2283.         cvs.style.left = l;
  2284.     };
  2285.     t.start(max);
  2286. }
  2287. var core = core || {}
  2288. core.Book = function() {
  2289.     this.pages = new Array();
  2290.     this.hotlinks = new Array();
  2291.     this.videos = new Array();
  2292.     this.audios = new Array();
  2293.     this.buttons = new Array();
  2294.     this.highlights = new Array();
  2295.     this.notes = new Array();
  2296.     this.bookmarks = new Array();
  2297.     this.slideshows = new Array();
  2298.     this.bookId = "";
  2299.     this.bookTitle = "";
  2300.     this.analyticsUA = "";
  2301.     this.singlepageMode = false;
  2302.     this.rightToLeft = false;
  2303.     this.menuTocVisible = true;
  2304.     this.menuThumbsVisible = true;
  2305.     this.menuSearchVisible = true;
  2306.     this.menuAutoFlipVisible = true;
  2307.     this.menuZoomVisible = true;
  2308.     this.menuBookmarkVisible = true;
  2309.     this.menuNoteVisible = true;
  2310.     this.menuHighlightVisible = true;
  2311. };
  2312. core.Book.__name__ = true;
  2313. core.Book.prototype = {
  2314.     preloadPages: function(num) {
  2315.         if(num == null) num = 0;
  2316.         if(num < 0 || num > this.pages.length - 1) return;
  2317.         var p = [];
  2318.         p.push(num);
  2319.         p.push(num + 1);
  2320.         p.push(num - 1);
  2321.         p.push(num + 2);
  2322.         p.push(num - 2);
  2323.         p.push(num + 3);
  2324.         p.push(num - 3);
  2325.         p.push(num + 4);
  2326.         p.push(num + 5);
  2327.         var tp = [];
  2328.         var _g1 = 0, _g = p.length;
  2329.         while(_g1 < _g) {
  2330.             var i = _g1++;
  2331.             var index = p[i];
  2332.             if(index >= 0 && index < this.pages.length) {
  2333.                 var page = this.pages[index];
  2334.                 page.getImagePage();
  2335.                 page.loadBigImagePage();
  2336.                 tp.push(index + 1);
  2337.             }
  2338.         }
  2339.     }
  2340.     ,__class__: core.Book
  2341. }
  2342. var haxe = haxe || {}
  2343. haxe.Timer = function(time_ms) {
  2344.     var me = this;
  2345.     this.id = window.setInterval(function() {
  2346.         me.run();
  2347.     },time_ms);
  2348. };
  2349. haxe.Timer.__name__ = true;
  2350. haxe.Timer.delay = function(f,time_ms) {
  2351.     var t = new haxe.Timer(time_ms);
  2352.     t.run = function() {
  2353.         t.stop();
  2354.         f();
  2355.     };
  2356.     return t;
  2357. }
  2358. haxe.Timer.measure = function(f,pos) {
  2359.     var t0 = haxe.Timer.stamp();
  2360.     var r = f();
  2361.     haxe.Log.trace(haxe.Timer.stamp() - t0 + "s",pos);
  2362.     return r;
  2363. }
  2364. haxe.Timer.stamp = function() {
  2365.     return new Date().getTime() / 1000;
  2366. }
  2367. haxe.Timer.prototype = {
  2368.     run: function() {
  2369.     }
  2370.     ,stop: function() {
  2371.         if(this.id == null) return;
  2372.         window.clearInterval(this.id);
  2373.         this.id = null;
  2374.     }
  2375.     ,__class__: haxe.Timer
  2376. }
  2377. var RunTime = function() { }
  2378. RunTime.__name__ = true;
  2379. RunTime.alert = function(msg) {
  2380.     js.Lib.alert(msg);
  2381. }
  2382. RunTime.init = function() {
  2383.     RunTime.kvPrex = js.Lib.window.location.pathname.split("?")[0];
  2384.     RunTime.loadingLogo = js.Lib.document.getElementById("loadingLogo");
  2385.     RunTime.clientWidth = js.Lib.window.document.body.clientWidth;
  2386.     RunTime.clientHeight = js.Lib.window.document.body.clientHeight;
  2387.     RunTime.defaultPageNum = Std.parseInt(orc.utils.Util.getUrlParam("page"));
  2388.     var dom = js.Lib.document.getElementById("hiddenSearch");
  2389.     var html = dom.innerHTML;
  2390.     dom.innerHTML = "";
  2391.     RunTime.searchHtmlCache = html;
  2392.     dom = js.Lib.document.getElementById("hiddenInput");
  2393.     html = dom.innerHTML;
  2394.     dom.innerHTML = "";
  2395.     RunTime.inputHtmlCache = html;
  2396.     RunTime.bgImage = js.Lib.document.getElementById("bgImage");
  2397.     RunTime.divLoading = js.Lib.document.getElementById("loading");
  2398.     RunTime.divLoading.style.top = (RunTime.clientHeight - RunTime.divLoading.clientHeight) / 2 + "px";
  2399.     RunTime.divLoading.style.left = (RunTime.clientWidth - RunTime.divLoading.clientWidth) / 2 + "px";
  2400.     RunTime.divLoading.style.display = "inline";
  2401.     RunTime.resizeTimer.run = RunTime.OnResize;
  2402.     js.Lib.window.document.body.onwebkitfullscreenchange = RunTime.onFullscreenChange;
  2403.     RunTime.preRequestBookInfo();
  2404. }
  2405. RunTime.onFullscreenChange = function(e) {
  2406.     RunTime.isFullscreen = !RunTime.isFullscreen;
  2407.     if(RunTime.isFullscreen) RunTime.resizeTimer.stop(); else {
  2408.         RunTime.resizeTimer = new haxe.Timer(600);
  2409.         RunTime.resizeTimer.run = RunTime.OnResize;
  2410.     }
  2411. }
  2412. RunTime.OnResize = function() {
  2413.     if(RunTime.isFullscreen) return;
  2414.     if(RunTime.clientWidth != js.Lib.window.document.body.clientWidth || RunTime.clientHeight != js.Lib.window.document.body.clientHeight) RunTime.reload();
  2415. }
  2416. RunTime.loadState = function() {
  2417.     var bbv = true;
  2418.     var params = orc.utils.Util.getUrlParams();
  2419.     var _g1 = 0, _g = params.length;
  2420.     while(_g1 < _g) {
  2421.         var i = _g1++;
  2422.         var item = params[i];
  2423.         if(item.key == "page") {
  2424.             var num = Std.parseInt(item.value);
  2425.             RunTime.defaultPageNum = num;
  2426.         } else if(item.key == "bbv") {
  2427.             if(item.value == "1") bbv = true; else if(item.value == "0") bbv = false;
  2428.         } else if(item.key == "pcode") RunTime.pcode = item.value;
  2429.     }
  2430.     if(bbv == true) RunTime.flipBook.showBottomBar(); else RunTime.flipBook.hideBottomBar(null,false);
  2431. }
  2432. RunTime.requestLanguages = function(callbackFunc) {
  2433.     orc.utils.Util.request(RunTime.urlLang,function(data) {
  2434.         var xml = Xml.parse(data);
  2435.         var i = xml.elementsNamed("languages");
  2436.         if(i.hasNext() == false) return;
  2437.         xml = i.next();
  2438.         i = xml.elementsNamed("language");
  2439.         if(i.hasNext() == false) return;
  2440.         var dftLang = null;
  2441.         while(i.hasNext() == true) {
  2442.             var node = i.next();
  2443.             var lang = new core.LangCfg();
  2444.             var cnt = node.get("content");
  2445.             var dft = node.get("default");
  2446.             if(dftLang == null) dftLang = lang;
  2447.             lang.content = cnt;
  2448.             if(dft == "yes" || dft == "Yes" || dft == "YES") {
  2449.                 lang.isDefault = true;
  2450.                 dftLang = lang;
  2451.             }
  2452.             RunTime.languages.push(lang);
  2453.         }
  2454.         if(dftLang != null) {
  2455.             var urlLangResource = RunTime.urlRoot + "data/languages/" + dftLang.content + ".xml";
  2456.             L.loadRemote(urlLangResource,callbackFunc,callbackFunc);
  2457.         } else callbackFunc();
  2458.     },callbackFunc);
  2459. }
  2460. RunTime.preRequestBookInfo = function() {
  2461.     orc.utils.Util.request(RunTime.urlBookinfo,function(data) {
  2462.         RunTime.bookInfo = Xml.parse(data);
  2463.         RunTime.getBookInfo();
  2464.         if(RunTime.book.singlepageMode) {
  2465.             RunTime.flipBook = new FlipBook();
  2466.             RunTime.singlePage = true;
  2467.         } else if(RunTime.clientHeight > RunTime.clientWidth) {
  2468.             RunTime.flipBook = new FlipBook();
  2469.             RunTime.singlePage = true;
  2470.         } else {
  2471.             RunTime.flipBook = new DoubleFlipBook();
  2472.             RunTime.singlePage = false;
  2473.         }
  2474.         RunTime.flipBook.zoom = js.Lib.document.getElementById("zoom");
  2475.         var bookleftpage = js.Lib.document.getElementById("leftpage");
  2476.         RunTime.flipBook.zoomLeftPage = bookleftpage;
  2477.         var bookrightpage = js.Lib.document.getElementById("rightpage");
  2478.         RunTime.flipBook.zoomRightPage = bookrightpage;
  2479.         var leftPageLock = js.Lib.document.getElementById("leftPageLock");
  2480.         var rightPageLock = js.Lib.document.getElementById("rightPageLock");
  2481.         RunTime.flipBook.leftPageLock = leftPageLock;
  2482.         RunTime.flipBook.rightPageLock = rightPageLock;
  2483.         var leftLockIcon = js.Lib.document.getElementById("leftLockIcon");
  2484.         var rightLockIcon = js.Lib.document.getElementById("rightLockIcon");
  2485.         RunTime.flipBook.leftLockIcon = leftLockIcon;
  2486.         RunTime.flipBook.rightLockIcon = rightLockIcon;
  2487.         RunTime.flipBook.root = js.Lib.document.getElementById("cvsBook");
  2488.         RunTime.flipBook.mask = js.Lib.document.getElementById("mask");
  2489.         RunTime.flipBook.tbPageCount = js.Lib.document.getElementById("tbPageCount");
  2490.         RunTime.flipBook.tbPage = js.Lib.document.getElementById("tbPage");
  2491.         RunTime.flipBook.btnContents = js.Lib.document.getElementById("btnContents");
  2492.         RunTime.flipBook.btnThumbs = js.Lib.document.getElementById("btnThumbs");
  2493.         RunTime.flipBook.btnSearch = js.Lib.document.getElementById("btnSearch");
  2494.         RunTime.flipBook.btnMask = js.Lib.document.getElementById("btnMask");
  2495.         RunTime.flipBook.btnBookMark = js.Lib.document.getElementById("btnBookMark");
  2496.         RunTime.flipBook.btnNote = js.Lib.document.getElementById("btnNote");
  2497.         RunTime.flipBook.btnPrevPage = js.Lib.document.getElementById("btnPrevPage");
  2498.         RunTime.flipBook.btnNextPage = js.Lib.document.getElementById("btnNextPage");
  2499.         RunTime.flipBook.btnFirstPage = js.Lib.document.getElementById("btnFirstPage");
  2500.         RunTime.flipBook.btnLastPage = js.Lib.document.getElementById("btnLastPage");
  2501.         RunTime.flipBook.btnAutoFlip = js.Lib.document.getElementById("btnAutoFlip");
  2502.         RunTime.flipBook.btnDownload = js.Lib.document.getElementById("btnDownload");
  2503.         RunTime.flipBook.btnAboutUs = js.Lib.document.getElementById("btnAboutUs");
  2504.         RunTime.flipBook.btnEmail = js.Lib.document.getElementById("btnEmail");
  2505.         RunTime.flipBook.btnSns = js.Lib.document.getElementById("btnSns");
  2506.         RunTime.flipBook.btnShowTxt = js.Lib.document.getElementById("btnShowTxt");
  2507.         RunTime.flipBook.imgLogo = js.Lib.document.getElementById("imgLogo");
  2508.         RunTime.flipBook.topBar = js.Lib.document.getElementById("topBar");
  2509.         RunTime.flipBook.topBarContent = js.Lib.document.getElementById("topBarContent");
  2510.         RunTime.flipBook.topFullTextContent = js.Lib.document.getElementById("topFullTextContent");
  2511.         RunTime.flipBook.bottomBar = js.Lib.document.getElementById("bottomBar");
  2512.         RunTime.flipBook.bottomBarBg = js.Lib.document.getElementById("bottomBarBg");
  2513.         RunTime.flipBook.bottomBarBg.style.opacity = RunTime.bottomBarAlpha;
  2514.         RunTime.flipBook.topMenuBar = js.Lib.document.getElementById("topMenuBar");
  2515.         RunTime.flipBook.topMenuBarBg = js.Lib.document.getElementById("topMenuBarBg");
  2516.         RunTime.flipBook.topMenuBarBg.style.opacity = RunTime.bottomBarAlpha;
  2517.         RunTime.flipBook.topBarContent.style.zIndex = 10000;
  2518.         RunTime.flipBook.menuParent = js.Lib.document.getElementById("menuParent");
  2519.         RunTime.flipBook.maskPopup = js.Lib.document.getElementById("maskPopup");
  2520.         RunTime.flipBook.cvsSlideshow = js.Lib.document.getElementById("cvsSlideshow");
  2521.         RunTime.flipBook.cvsVideo = js.Lib.document.getElementById("cvsVideo");
  2522.         RunTime.flipBook.cvsOthers = js.Lib.document.getElementById("cvsOthers");
  2523.         RunTime.flipBook.cvsAudio = js.Lib.document.getElementById("cvsAudio");
  2524.         RunTime.flipBook.cvsLeftPageBgAudio = js.Lib.document.getElementById("cvsLeftPageBgAudio");
  2525.         RunTime.flipBook.cvsRightPageBgAudio = js.Lib.document.getElementById("cvsRightPageBgAudio");
  2526.         RunTime.flipBook.cvsYoutube = js.Lib.document.getElementById("cvsYoutube");
  2527.         RunTime.flipBook.btnZoom = js.Lib.document.getElementById("btnZoom");
  2528.         var left = (RunTime.clientWidth - 500) / 2 | 0;
  2529.         RunTime.flipBook.topBar.style.left = Std.string(left) + "px";
  2530.         var c = RunTime.flipBook.root;
  2531.         RunTime.flipBook.canvas = c;
  2532.         c.width = RunTime.clientWidth;
  2533.         c.height = RunTime.clientHeight;
  2534.         if(RunTime.clientWidth < 800) {
  2535.             js.Lib.document.getElementById("btnFirstPage").style.marginLeft = "10px";
  2536.             js.Lib.document.getElementById("btnPrevPage").style.marginLeft = "10px";
  2537.             js.Lib.document.getElementById("btnNextPage").style.marginLeft = "10px";
  2538.             js.Lib.document.getElementById("btnLastPage").style.marginLeft = "10px";
  2539.         }
  2540.         var cvsButton = js.Lib.document.getElementById("cvsButton");
  2541.         RunTime.flipBook.cvsButton = cvsButton;
  2542.         cvsButton.width = RunTime.clientWidth;
  2543.         cvsButton.height = RunTime.clientHeight;
  2544.         var cvsHighLight = js.Lib.document.getElementById("cvsHighLight");
  2545.         RunTime.flipBook.cvsHighLight = cvsHighLight;
  2546.         cvsHighLight.width = RunTime.clientWidth;
  2547.         cvsHighLight.height = RunTime.clientHeight;
  2548.         var cvsNote = js.Lib.document.getElementById("cvsNote");
  2549.         RunTime.flipBook.cvsNote = cvsNote;
  2550.         cvsNote.width = RunTime.clientWidth;
  2551.         cvsNote.height = RunTime.clientHeight;
  2552.         var cvsBookmark = js.Lib.document.getElementById("cvsBookmark");
  2553.         RunTime.flipBook.cvsBookmark = cvsBookmark;
  2554.         cvsBookmark.width = RunTime.clientWidth;
  2555.         cvsBookmark.height = RunTime.clientHeight;
  2556.         RunTime.flipBook.afterInit();
  2557.         RunTime.flipBook.bookContext.ctx = RunTime.flipBook.getContext();
  2558.         RunTime.flipBook.bookContext.ctxButton = RunTime.flipBook.getButtonContext();
  2559.         RunTime.flipBook.bookContext.ctxHighLight = RunTime.flipBook.getHighLightContext();
  2560.         RunTime.flipBook.bookContext.ctxNote = RunTime.flipBook.getNoteContext();
  2561.         RunTime.flipBook.bookContext.ctxBookmark = RunTime.flipBook.getBookmarkContext();
  2562.         RunTime.requestLanguages(RunTime.requestBookInfo);
  2563.         RunTime.flipBook.attachActions();
  2564.     });
  2565. }
  2566. RunTime.requestBookInfo = function() {
  2567.     orc.utils.Util.request(RunTime.urlBookinfo,function(data) {
  2568.         RunTime.bookInfo = Xml.parse(data);
  2569.         RunTime.loadBookInfo();
  2570.         RunTime.key = RunTime.calcKey(RunTime.book.pageWidth | 0,RunTime.book.pageHeight | 0);
  2571.         var defaultKey = "Pwd-Empty";
  2572.         if(RunTime.pcode.length > 0) defaultKey = RunTime.decode64(RunTime.pcode);
  2573.         var encode = RunTime.encryptKey(defaultKey,RunTime.key);
  2574.         if(encode == RunTime.book.password) {
  2575.             if(encode == RunTime.book.password && RunTime.pcode.length > 0) RunTime.bLocked = false;
  2576.             RunTime.afterRequestBookInfo();
  2577.         } else if(RunTime.book.lockPages != null) {
  2578.             if(RunTime.book.lockPages.length > 0) {
  2579.                 if(encode == RunTime.book.password && RunTime.pcode.length > 0) RunTime.bLocked = false;
  2580.                 RunTime.afterRequestBookInfo();
  2581.             }
  2582.         } else RunTime.InputPwd();
  2583.         if(!RunTime.singlePage) RunTime.flipBook.requestMainAd();
  2584.         RunTime.hideLoadingLogo();
  2585.     });
  2586. }
  2587. RunTime.InputPwd = function() {
  2588.     RunTime.showPopupMaskLayer();
  2589.     RunTime.flipBook.cvsOthers.innerHTML = core.HtmlHelper.toInputPwdHtml();
  2590. }
  2591. RunTime.InputUnlock = function() {
  2592.     RunTime.showPopupMaskLayer();
  2593.     RunTime.flipBook.cvsOthers.innerHTML = core.HtmlHelper.toInputUnlockPwdHtml();
  2594. }
  2595. RunTime.tryPwd = function(pwd) {
  2596.     var encode = RunTime.encryptKey(pwd,RunTime.key);
  2597.     if(encode == RunTime.book.password) {
  2598.         RunTime.pcode = StringTools.urlEncode(RunTime.encode64(pwd,false));
  2599.         RunTime.afterRequestBookInfo();
  2600.     } else js.Lib.window.alert(L.s("PasswordError"));
  2601. }
  2602. RunTime.tryUnlock = function(pwd) {
  2603.     var encode = RunTime.encryptKey(pwd,RunTime.key);
  2604.     if(encode == RunTime.book.password) {
  2605.         RunTime.pcode = StringTools.urlEncode(RunTime.encode64(pwd,false));
  2606.         js.Lib.document.getElementById("inputBox").style.display = "none";
  2607.         RunTime.clearPopupContents();
  2608.         RunTime.bLocked = false;
  2609.         RunTime.flipBook.leftPageLock.style.display = "none";
  2610.         RunTime.flipBook.rightPageLock.style.display = "none";
  2611.         RunTime.flipBook.bookContext.render();
  2612.     } else js.Lib.window.alert(L.s("PasswordError"));
  2613. }
  2614. RunTime.afterRequestBookInfo = function() {
  2615.     RunTime.flipBook.cvsOthers.innerHTML = "";
  2616.     RunTime.clearPopupContents();
  2617.     RunTime.requestPages();
  2618.     RunTime.useAnalyticsUA(RunTime.book.analyticsUA,RunTime.book.bookId);
  2619. }
  2620. RunTime.requestPages = function() {
  2621.     orc.utils.Util.request(RunTime.urlPageInfo,function(data) {
  2622.         RunTime.pageInfo = Xml.parse(data);
  2623.         RunTime.loadPageInfo();
  2624.         RunTime.requestHotlinks();
  2625.         RunTime.requestSlideshow();
  2626.         RunTime.requestContents();
  2627.         RunTime.requestShare();
  2628.         RunTime.requestAbout();
  2629.         RunTime.requestVideos();
  2630.         RunTime.reauestAudios();
  2631.         RunTime.requestButtons();
  2632.         RunTime.readLocalHighLights();
  2633.         RunTime.readLocalNotes();
  2634.         RunTime.requestBookmark();
  2635.         RunTime.readLocalBookmarks();
  2636.     });
  2637. }
  2638. RunTime.requestSlideshow = function(onSuccess) {
  2639.     orc.utils.Util.request(RunTime.urlSlideshow,function(data) {
  2640.         var dom = new DOMParser();
  2641.         var ctx = new Xml2Html();
  2642.         RunTime.slideshow = dom.parseFromString(ctx.prepareXmlAsHtml(data),"text/xml");
  2643.         RunTime.loadSlideshow(ctx);
  2644.         if(RunTime.flipBook != null) {
  2645.             RunTime.flipBook.loadCtxSlideshow();
  2646.             RunTime.flipBook.bookContext.render();
  2647.         }
  2648.         if(onSuccess != null) onSuccess();
  2649.     });
  2650. }
  2651. RunTime.requestHotlinks = function(onSuccess) {
  2652.     orc.utils.Util.request(RunTime.urlHotlinks,function(data) {
  2653.         var dom = new DOMParser();
  2654.         var ctx = new Xml2Html();
  2655.         RunTime.hotlinkInfo = dom.parseFromString(ctx.prepareXmlAsHtml(data),"text/xml");
  2656.         RunTime.loadHotlinks(ctx);
  2657.         if(RunTime.flipBook != null) {
  2658.             RunTime.flipBook.loadCtxHotlinks();
  2659.             RunTime.flipBook.bookContext.render();
  2660.         }
  2661.         if(onSuccess != null) onSuccess();
  2662.     });
  2663. }
  2664. RunTime.requestVideos = function(onSuccess) {
  2665.     orc.utils.Util.request(RunTime.urlVideos,function(data) {
  2666.         RunTime.videoInfo = Xml.parse(data);
  2667.         RunTime.loadVideos();
  2668.         if(RunTime.flipBook != null) {
  2669.             RunTime.flipBook.updateVideos();
  2670.             RunTime.flipBook.bookContext.render();
  2671.         }
  2672.         if(onSuccess != null) onSuccess();
  2673.     });
  2674. }
  2675. RunTime.reauestAudios = function(onSuccess) {
  2676.     orc.utils.Util.request(RunTime.urlAudios,function(data) {
  2677.         RunTime.audioInfo = Xml.parse(data);
  2678.         RunTime.loadAudios();
  2679.         if(RunTime.flipBook != null) RunTime.flipBook.updateAudios();
  2680.         if(onSuccess != null) onSuccess();
  2681.     });
  2682. }
  2683. RunTime.requestButtons = function(onSuccess) {
  2684.     orc.utils.Util.request(RunTime.urlButtons,function(data) {
  2685.         RunTime.buttonInfo = Xml.parse(data);
  2686.         RunTime.loadButtons();
  2687.         if(RunTime.flipBook != null) {
  2688.             RunTime.flipBook.loadCtxButtons();
  2689.             RunTime.flipBook.bookContext.render();
  2690.         }
  2691.         if(onSuccess != null) onSuccess();
  2692.     });
  2693. }
  2694. RunTime.requestContents = function() {
  2695.     orc.utils.Util.request(RunTime.urlContents,function(data) {
  2696.         RunTime.contentInfo = Xml.parse(data);
  2697.     });
  2698. }
  2699. RunTime.requestShare = function() {
  2700.     orc.utils.Util.request(RunTime.urlShareInfo,function(data) {
  2701.         RunTime.shareInfo = Xml.parse(data);
  2702.     });
  2703. }
  2704. RunTime.requestAbout = function() {
  2705.     orc.utils.Util.request(RunTime.urlAbout,function(data) {
  2706.         RunTime.aboutInfo = Xml.parse(data);
  2707.     });
  2708. }
  2709. RunTime.requestSearch = function(invoke) {
  2710.     orc.utils.Util.request(RunTime.urlSearch,function(data) {
  2711.         var dom = new DOMParser();
  2712.         var ctx = new Xml2Html();
  2713.         RunTime.searchInfo = dom.parseFromString(ctx.prepareXmlAsHtml(data),"text/xml");
  2714.         RunTime.loadPageContents(ctx);
  2715.         if(invoke != null) invoke(RunTime.book.pages);
  2716.     });
  2717. }
  2718. RunTime.requestBookmark = function() {
  2719.     orc.utils.Util.request(RunTime.urlBookmarks,function(data) {
  2720.         RunTime.bookmarkInfo = Xml.parse(data);
  2721.         var it = RunTime.bookmarkInfo.firstElement().elementsNamed("bookmark");
  2722.         do {
  2723.             var node = it.next();
  2724.             if(node == null) break;
  2725.             var bk = new core.Bookmark();
  2726.             bk.pageNum = node.get("page");
  2727.             bk.text = node.get("content");
  2728.             bk.onlyread = true;
  2729.             RunTime.book.bookmarks.push(bk);
  2730.         } while(it.hasNext());
  2731.     });
  2732. }
  2733. RunTime.invokePageContentsAction = function(invoke) {
  2734.     if(RunTime.searchInfo == null) RunTime.requestSearch(invoke); else invoke(RunTime.book.pages);
  2735. }
  2736. RunTime.loadPageContents = function(ctx) {
  2737.     if(RunTime.searchInfo == null) return;
  2738.     var dom = RunTime.searchInfo;
  2739.     var pages = dom.getElementsByTagName("page");
  2740.     var _g1 = 0, _g = pages.length;
  2741.     while(_g1 < _g) {
  2742.         var i = _g1++;
  2743.         var node = pages[i];
  2744.         var pageNumVal = node.getAttribute("pageNumber");
  2745.         var htmlText = null;
  2746.         var htmlTextDoms = node.getElementsByTagName("cdata");
  2747.         if(htmlTextDoms != null && htmlTextDoms.length > 0) {
  2748.             htmlText = StringTools.trim(htmlTextDoms[0].childNodes[0].nodeValue);
  2749.             htmlText = ctx.getCData(htmlText);
  2750.         }
  2751.         var _g3 = 0, _g2 = RunTime.book.pages.length;
  2752.         while(_g3 < _g2) {
  2753.             var k = _g3++;
  2754.             var page = RunTime.book.pages[k];
  2755.             if(page.id == pageNumVal) page.content = htmlText;
  2756.         }
  2757.     }
  2758. }
  2759. RunTime.reload = function() {
  2760.     js.Lib.window.location.href = RunTime.flipBook.getFullUrl();
  2761. }
  2762. RunTime.navigateUrl = function(url) {
  2763.     if(url == null || url == "null" || url == "") return;
  2764.     js.Lib.window.location.href = url;
  2765. }
  2766. RunTime.showAsButtonClick = function(t) {
  2767.     var newMask = js.Lib.document.createElement("div");
  2768.     newMask.id = "newMask";
  2769.     newMask.style.position = "absolute";
  2770.     newMask.style.zIndex = 100;
  2771.     newMask.style.width = js.Lib.document.body.scrollWidth + "px";
  2772.     newMask.style.height = js.Lib.document.body.scrollHeight + "px";
  2773.     newMask.style.top = "0px";
  2774.     newMask.style.left = "0px";
  2775.     newMask.style.background = "#000";
  2776.     newMask.style.opacity = 0.50;
  2777.     js.Lib.document.body.appendChild(newMask);
  2778.     js.Lib.document.getElementById("cvsOthers").innerHTML = RunTime.slideshowPopupHtml;
  2779.     js.Lib.document.getElementById("popupSlideshow").style.cssText += " -moz-transform: scale(1);-moz-transition: width 0.5s ease-out; -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  2780. }
  2781. RunTime.clearSlideshowContents = function() {
  2782.     js.Lib.document.body.removeChild(js.Lib.document.getElementById("newMask"));
  2783. }
  2784. RunTime.showLoadingLogo = function(loadingUrl) {
  2785.     if(loadingUrl == null || loadingUrl == "") return;
  2786.     RunTime.loadingLogo.innerHTML = "<img src='" + loadingUrl + "'>";
  2787.     RunTime.loadingLogo.style.top = (RunTime.clientHeight - RunTime.loadingLogo.clientHeight) / 2 + "px";
  2788.     RunTime.loadingLogo.style.left = (RunTime.clientWidth - RunTime.loadingLogo.clientWidth) / 2 + "px";
  2789.     RunTime.loadingLogo.style.display = "inline";
  2790. }
  2791. RunTime.hideLoadingLogo = function() {
  2792.     RunTime.loadingLogo.innerHTML = "";
  2793.     RunTime.loadingLogo.style.display = "none";
  2794. }
  2795. RunTime.getBookInfo = function() {
  2796.     if(RunTime.bookInfo == null) return;
  2797.     var i = RunTime.bookInfo.elementsNamed("bookinfo");
  2798.     if(i.hasNext() == false) return;
  2799.     var node = i.next();
  2800.     RunTime.showLoadingLogo(node.get("loadingLogo"));
  2801.     RunTime.book.singlepageMode = node.get("singlepageMode") == "true"?true:false;
  2802.     RunTime.book.rightToLeft = node.get("rightToLeft") == "true"?true:false;
  2803.     RunTime.book.autoFlipSecond = Std.parseInt(node.get("autoFlipSeconds"));
  2804.     RunTime.book.gateway = node.get("gateway");
  2805.     RunTime.book.shareHref = node.get("shareUrl");
  2806. }
  2807. RunTime.loadBookInfo = function() {
  2808.     if(RunTime.bookInfo == null) return;
  2809.     var i = RunTime.bookInfo.elementsNamed("bookinfo");
  2810.     if(i.hasNext() == false) return;
  2811.     var node = i.next();
  2812.     var idVal = node.get("id");
  2813.     if(idVal == null) idVal = "";
  2814.     RunTime.book.bookId = idVal;
  2815.     RunTime.book.bookTitle = node.get("title");
  2816.     RunTime.book.bgColor = node.get("bgColor");
  2817.     RunTime.book.bgImageUrl = node.get("bgImage");
  2818.     RunTime.book.analyticsUA = node.get("analyticsUA");
  2819.     RunTime.book.password = node.get("password");
  2820.     RunTime.book.bookDownloadUrl = node.get("pdfUrl");
  2821.     var locked = node.get("protectedPages");
  2822.     if(locked != null && locked != "") RunTime.book.lockPages = locked.split(",");
  2823.     if(RunTime.book.bgColor == "" || RunTime.book.bgColor == null) RunTime.book.bgColor = "gray";
  2824.     if(RunTime.book.bgColor != "" && RunTime.book.bgColor != null) js.Lib.document.body.style.backgroundColor = RunTime.book.bgColor;
  2825.     if(RunTime.book.bgImageUrl != "" && RunTime.book.bgImageUrl != null) {
  2826.         js.Lib.document.body.style.backgroundImage = "url(" + RunTime.book.bgImageUrl + ")";
  2827.         js.Lib.document.body.style.backgroundRepeat = "no-repeat";
  2828.         js.Lib.document.body.style.backgroundPosition = "center";
  2829.         js.Lib.document.body.style.backgroundSize = "cover";
  2830.         js.Lib.document.body.style.backgroundClip = "border-box";
  2831.     }
  2832.     js.Lib.window.document.title = RunTime.book.bookTitle;
  2833.     var pageWidth = Std.parseFloat(node.get("pageWidth"));
  2834.     var pageHeight = Std.parseFloat(node.get("pageHeight"));
  2835.     RunTime.book.pageWidth = pageWidth;
  2836.     RunTime.book.pageHeight = pageHeight;
  2837.     var m = new orc.utils.ImageMetricHelper(pageWidth,pageHeight);
  2838.     var w = RunTime.clientWidth;
  2839.     var h = RunTime.clientHeight;
  2840.     var scale = m.getMaxFitScale(w,h);
  2841.     RunTime.defaultScale = scale;
  2842.     RunTime.imagePageWidth = pageWidth * scale;
  2843.     RunTime.imagePageHeight = pageHeight * scale;
  2844.     RunTime.pageScale = scale;
  2845.     var li = node.elementsNamed("bookLogo");
  2846.     if(li.hasNext() == true) {
  2847.         var lnode = li.next();
  2848.         RunTime.book.logoUrl = lnode.get("url");
  2849.         RunTime.book.logoHref = lnode.get("href");
  2850.     }
  2851.     if(RunTime.book.logoUrl != null && RunTime.book.logoUrl != "") {
  2852.         var hideLogo = false;
  2853.         if(RunTime.clientWidth < 600) hideLogo = true;
  2854.         if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1) hideLogo = true;
  2855.         if(!hideLogo) {
  2856.             RunTime.flipBook.imgLogo.style.display = "inline";
  2857.             var obj = RunTime.flipBook.imgLogo;
  2858.             obj.src = RunTime.book.logoUrl;
  2859.             RunTime.flipBook.imgLogo.onclick = RunTime.onLogoClick;
  2860.         }
  2861.     }
  2862.     RunTime.flipBook.btnDownload.onclick = RunTime.onDownloadClick;
  2863.     var bottomMenuIter = node.elementsNamed("bottommenu");
  2864.     if(bottomMenuIter.hasNext() == true) {
  2865.         var bottomMenuNode = bottomMenuIter.next();
  2866.         RunTime.book.menuAutoFlipVisible = RunTime.getMenuVisible(bottomMenuNode,"autoflip");
  2867.         RunTime.book.menuSearchVisible = RunTime.getMenuVisible(bottomMenuNode,"search");
  2868.         if(bottomMenuNode.elementsNamed("text").hasNext()) RunTime.book.menuTxtVisible = RunTime.getMenuVisible(bottomMenuNode,"text"); else RunTime.book.menuTxtVisible = RunTime.getMenuVisible(bottomMenuNode,"txt");
  2869.         RunTime.book.menuZoomVisible = RunTime.getMenuVisible(bottomMenuNode,"zoom");
  2870.         RunTime.book.menuBookmarkVisible = RunTime.getMenuVisible(bottomMenuNode,"bookmark");
  2871.         RunTime.book.menuNoteVisible = RunTime.getMenuVisible(bottomMenuNode,"notes");
  2872.         RunTime.book.menuHighlightVisible = RunTime.getMenuVisible(bottomMenuNode,"highlight");
  2873.     }
  2874.     var leftMenuIter = node.elementsNamed("leftmenu");
  2875.     if(leftMenuIter.hasNext() == true) {
  2876.         var leftMenuNode = leftMenuIter.next();
  2877.         RunTime.book.menuTocVisible = RunTime.getMenuVisible(leftMenuNode,"toc");
  2878.         RunTime.book.menuThumbsVisible = RunTime.getMenuVisible(leftMenuNode,"thumbs");
  2879.         RunTime.book.menuDownloadVisible = RunTime.getMenuEntirePDF(leftMenuNode,"pdf");
  2880.         RunTime.book.menuEmailVisible = RunTime.getMenuVisible(leftMenuNode,"email");
  2881.         RunTime.book.menuSnsVisible = RunTime.getMenuVisible(leftMenuNode,"sns");
  2882.         RunTime.book.menuAboutUsVisible = RunTime.getMenuVisible(leftMenuNode,"about");
  2883.     }
  2884.     RunTime.setMenuVisible(RunTime.flipBook.btnContents,RunTime.book.menuTocVisible);
  2885.     RunTime.setMenuVisible(RunTime.flipBook.btnThumbs,RunTime.book.menuThumbsVisible);
  2886.     RunTime.setMenuVisible(RunTime.flipBook.btnSearch,RunTime.book.menuSearchVisible);
  2887.     RunTime.setMenuVisible(RunTime.flipBook.btnAutoFlip,RunTime.book.menuAutoFlipVisible);
  2888.     RunTime.setMenuVisible(RunTime.flipBook.btnShowTxt,RunTime.book.menuTxtVisible);
  2889.     RunTime.setMenuVisible(RunTime.flipBook.btnZoom,false);
  2890.     RunTime.setMenuVisible(RunTime.flipBook.btnDownload,RunTime.book.menuDownloadVisible);
  2891.     RunTime.setMenuVisible(RunTime.flipBook.btnEmail,RunTime.book.menuEmailVisible);
  2892.     RunTime.setMenuVisible(RunTime.flipBook.btnSns,RunTime.book.menuSnsVisible);
  2893.     RunTime.setMenuVisible(RunTime.flipBook.btnAboutUs,RunTime.book.menuAboutUsVisible);
  2894.     var menuCount = 0;
  2895.     if(RunTime.book.menuTocVisible) menuCount += 1;
  2896.     if(RunTime.book.menuThumbsVisible) menuCount += 1;
  2897.     if(RunTime.book.menuSearchVisible) menuCount += 1;
  2898.     if(RunTime.book.menuAutoFlipVisible) menuCount += 1;
  2899.     if(RunTime.book.menuTxtVisible) menuCount += 1;
  2900.     var hideIcon = false;
  2901.     if(RunTime.clientWidth < 480) hideIcon = true;
  2902.     if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1 && RunTime.clientWidth < 480) hideIcon = true;
  2903.     if(hideIcon) {
  2904.         if(menuCount < 5) RunTime.setMenuVisible(RunTime.flipBook.btnMask,RunTime.book.menuHighlightVisible);
  2905.         if(RunTime.book.menuHighlightVisible) menuCount += 1;
  2906.         if(menuCount < 5) {
  2907.             RunTime.setMenuVisible(RunTime.flipBook.btnNote,RunTime.book.menuNoteVisible);
  2908.             menuCount += 1;
  2909.         }
  2910.         if(RunTime.book.menuNoteVisible) menuCount += 1;
  2911.         if(menuCount < 5) {
  2912.             RunTime.setMenuVisible(RunTime.flipBook.btnBookMark,RunTime.book.menuBookmarkVisible);
  2913.             menuCount += 1;
  2914.         }
  2915.     } else {
  2916.         RunTime.setMenuVisible(RunTime.flipBook.btnMask,RunTime.book.menuHighlightVisible);
  2917.         RunTime.setMenuVisible(RunTime.flipBook.btnNote,RunTime.book.menuNoteVisible);
  2918.         RunTime.setMenuVisible(RunTime.flipBook.btnBookMark,RunTime.book.menuBookmarkVisible);
  2919.     }
  2920.     RunTime.loadState();
  2921. }
  2922. RunTime.setMenuVisible = function(menu,visible) {
  2923.     if(visible == true) menu.style.display = "inline"; else RunTime.flipBook.menuParent.removeChild(menu);
  2924. }
  2925. RunTime.getMenuVisible = function(parent,nodeName) {
  2926.     var li = parent.elementsNamed(nodeName);
  2927.     if(li.hasNext() == true) {
  2928.         var lnode = li.next();
  2929.         if(lnode.get("visible") == "false") return false;
  2930.     }
  2931.     return true;
  2932. }
  2933. RunTime.getMenuEntirePDF = function(parent,nodeName) {
  2934.     var li = parent.elementsNamed(nodeName);
  2935.     if(li.hasNext() == true) {
  2936.         var lnode = li.next();
  2937.         if(lnode.get("entirePDF") == "true") return true;
  2938.     }
  2939.     return false;
  2940. }
  2941. RunTime.onLogoClick = function(e) {
  2942.     if(RunTime.book == null || RunTime.book.logoHref == null || RunTime.book.logoHref == "") return;
  2943.     js.Lib.window.location.href = RunTime.book.logoHref;
  2944. }
  2945. RunTime.onDownloadClick = function(e) {
  2946.     if(RunTime.book == null || RunTime.book.bookDownloadUrl == null || RunTime.book.bookDownloadUrl == "") return;
  2947.     js.Lib.window.location.href = RunTime.book.bookDownloadUrl;
  2948. }
  2949. RunTime.onSendEmail = function() {
  2950.     RunTime.sendEmailByService();
  2951. }
  2952. RunTime.sendEmailResult = function() {
  2953.     if(RunTime.sendService.responseText.length < 2) {
  2954.         js.Lib.alert(L.s("EmailSendSuccessful"));
  2955.         var tomail = js.Lib.window.document.getElementById("tomail");
  2956.         tomail.value = "";
  2957.         var frommail = js.Lib.window.document.getElementById("youremail");
  2958.         frommail.value = "";
  2959.         var n = js.Lib.window.document.getElementById("yname");
  2960.         n.value = "";
  2961.         var m = js.Lib.window.document.getElementById("sharemsg");
  2962.         m.value = "";
  2963.     } else js.Lib.alert(L.s("EmailSendFailed"));
  2964. }
  2965. RunTime.sendEmailByService = function() {
  2966.     var baseUrl = js.Lib.window.location.href.split("?")[0];
  2967.     baseUrl = baseUrl.substring(0,baseUrl.lastIndexOf("/"));
  2968.     var tomail = js.Lib.window.document.getElementById("tomail");
  2969.     var frommail = js.Lib.window.document.getElementById("youremail");
  2970.     var n = js.Lib.window.document.getElementById("yname");
  2971.     var subject = L.s("YourFriend","YourFirend") + Std.string(n.value) + L.s("ShareEmailTitle","ShareEmailTitle");
  2972.     js.Lib.window.document.getElementById("subject").setAttribute("value",subject);
  2973.     var m = js.Lib.window.document.getElementById("sharemsg");
  2974.     var msg = m.value;
  2975.     msg += "<br /> <br /> " + Std.string(n.value) + L.s("ShareEmailContent") + "<a href='" + baseUrl + "/" + RunTime.book.shareHref + "' target='_black'>" + baseUrl + "/" + RunTime.book.shareHref + "<a/>" + "<br /> <br />" + "<a href='" + baseUrl + "/" + RunTime.book.shareHref + "' target='_black'>" + "<img src='" + baseUrl + "/" + RunTime.book.pages[0].urlThumb + "' >" + "<a/>";
  2976.     RunTime.sendService = new XMLHttpRequest();
  2977.     var query = "tomail=" + Std.string(tomail.value) + "&frommail=" + Std.string(frommail.value) + "&subject=" + subject + "&message=" + msg;
  2978.     RunTime.sendService.open("get",RunTime.book.gateway + "?" + query,true);
  2979.     RunTime.sendService.onreadystatechange = RunTime.sendEmailResult;
  2980.     RunTime.sendService.send();
  2981. }
  2982. RunTime.sendEmailByForm = function() {
  2983.     var n = js.Lib.window.document.getElementById("yname");
  2984.     var subject = L.s("YourFriend","YourFirend") + Std.string(n.value) + L.s("ShareEmailTitle","ShareEmailTitle");
  2985.     js.Lib.window.document.getElementById("subject").setAttribute("value",subject);
  2986.     var m = js.Lib.window.document.getElementById("sharemsg");
  2987.     var msg = m.value;
  2988.     msg += "<br /> <br /> " + Std.string(n.value) + L.s("ShareEmailContent") + "<a href='" + RunTime.book.shareHref + "' target='_black'>" + RunTime.book.shareHref + "<a/>" + "<br /> <br />" + "<a href='" + RunTime.book.shareHref + "' target='_black'>" + "<img src='" + RunTime.book.pages[0].urlThumb + "' >" + "<a/>";
  2989.     var b = js.Lib.window.document.getElementById("sendEmail");
  2990.     b.submit();
  2991. }
  2992. RunTime.loadPageInfo = function() {
  2993.     if(RunTime.pageInfo == null) return;
  2994.     var root = RunTime.pageInfo.firstElement();
  2995.     var val = root.get("preload");
  2996.     if(val.toLowerCase() == "true") RunTime.enablePreload = true;
  2997.     var i = root.elementsNamed("page");
  2998.     var num = 0;
  2999.     var numDouble = 0.1;
  3000.     while(i.hasNext() == true) {
  3001.         var node = i.next();
  3002.         var id = node.get("id");
  3003.         var source = node.get("source");
  3004.         var medium = node.get("medium");
  3005.         var thumb = node.get("thumb");
  3006.         var canZoom = !(node.get("canZoom") == "false");
  3007.         var page = new core.Page();
  3008.         RunTime.book.pages.push(page);
  3009.         if(medium == null || medium == "") medium = "content/medium/page" + Std.string(num + 1) + ".jpg";
  3010.         page.id = id;
  3011.         page.num = num;
  3012.         page.numInDoubleMode = Math.round(numDouble) | 0;
  3013.         page.urlPage = medium;
  3014.         page.urlBigPage = source;
  3015.         page.urlThumb = thumb;
  3016.         page.urlFullPage = source;
  3017.         page.canZoom = canZoom;
  3018.         page.locked = RunTime.checkLocked(num + 1);
  3019.         numDouble += 0.5;
  3020.         num++;
  3021.     }
  3022.     RunTime.flipBook.setPageCount(RunTime.book.pages.length);
  3023.     RunTime.flipBook.setCurrentPage(RunTime.defaultPageNum + 1);
  3024.     RunTime.flipBook.loadPage(RunTime.defaultPageNum);
  3025. }
  3026. RunTime.checkLocked = function(num) {
  3027.     if(RunTime.book.lockPages == null || RunTime.book.lockPages.length == 0) return false;
  3028.     var _g1 = 0, _g = RunTime.book.lockPages.length;
  3029.     while(_g1 < _g) {
  3030.         var i = _g1++;
  3031.         if(Std.parseInt(RunTime.book.lockPages[i]) == num) return true;
  3032.     }
  3033.     return false;
  3034. }
  3035. RunTime.loadSlideshow = function(ctx) {
  3036.     if(RunTime.slideshow == null) return;
  3037.     var dom = RunTime.slideshow;
  3038.     var slides = dom.getElementsByTagName("slideshow");
  3039.     var _g1 = 0, _g = slides.length;
  3040.     while(_g1 < _g) {
  3041.         var i = _g1++;
  3042.         var node = slides[i];
  3043.         var pageNumVal = node.getAttribute("page");
  3044.         var xVal = node.getAttribute("x");
  3045.         var yVal = node.getAttribute("y");
  3046.         var pagewidth = node.getAttribute("pagewidth");
  3047.         var showAsButton = node.getAttribute("showAsButton");
  3048.         var popupWidthVal = node.getAttribute("popupWidth");
  3049.         var popupHeightVal = node.getAttribute("popupHeight");
  3050.         var widthVal = node.getAttribute("width");
  3051.         var heightVal = node.getAttribute("height");
  3052.         var timeVal = node.getAttribute("time");
  3053.         var transitionVal = node.getAttribute("transition");
  3054.         var idVal = node.getAttribute("sid");
  3055.         var bgColorVal = node.getAttribute("bgColor");
  3056.         var slideshowInfo = new core.SlideshowInfo();
  3057.         var pics = node.getElementsByTagName("pic");
  3058.         var _g3 = 0, _g2 = pics.length;
  3059.         while(_g3 < _g2) {
  3060.             var j = _g3++;
  3061.             var pnode = pics[j];
  3062.             var slide = new core.Slide();
  3063.             slide.url = pnode.getAttribute("url");
  3064.             slide.href = pnode.getAttribute("href");
  3065.             slideshowInfo.slides.push(slide);
  3066.         }
  3067.         slideshowInfo.pageNum = Std.parseInt(pageNumVal) - 1;
  3068.         slideshowInfo.x = Std.parseFloat(xVal);
  3069.         slideshowInfo.y = Std.parseFloat(yVal);
  3070.         slideshowInfo.pagewidth = Std.parseFloat(pagewidth);
  3071.         slideshowInfo.showAsButton = showAsButton == "true"?true:false;
  3072.         if(popupWidthVal != null) slideshowInfo.popupWidth = Std.parseFloat(popupWidthVal);
  3073.         if(popupHeightVal != null) slideshowInfo.popupHeight = Std.parseFloat(popupHeightVal);
  3074.         slideshowInfo.width = Std.parseFloat(widthVal);
  3075.         slideshowInfo.height = Std.parseFloat(heightVal);
  3076.         slideshowInfo.interval = timeVal;
  3077.         slideshowInfo.transition = transitionVal;
  3078.         if(idVal == null) idVal = "sId_" + i;
  3079.         slideshowInfo.id = idVal;
  3080.         slideshowInfo.bgColor = bgColorVal;
  3081.         RunTime.book.slideshows.push(slideshowInfo);
  3082.     }
  3083. }
  3084. RunTime.loadHotlinks = function(ctx) {
  3085.     if(RunTime.hotlinkInfo == null) return;
  3086.     var dom = RunTime.hotlinkInfo;
  3087.     var links = dom.getElementsByTagName("hotlink");
  3088.     var _g1 = 0, _g = links.length;
  3089.     while(_g1 < _g) {
  3090.         var i = _g1++;
  3091.         var node = links[i];
  3092.         var pageNumVal = node.getAttribute("page");
  3093.         var xVal = node.getAttribute("x");
  3094.         var yVal = node.getAttribute("y");
  3095.         var widthVal = node.getAttribute("width");
  3096.         var heightVal = node.getAttribute("height");
  3097.         var colorVal = node.getAttribute("color");
  3098.         var opacityVal = node.getAttribute("opacity");
  3099.         var destinationVal = node.getAttribute("destination");
  3100.         var typeVal = node.getAttribute("type");
  3101.         var popupWidthVal = node.getAttribute("popupWidth");
  3102.         var popupHeightVal = node.getAttribute("popupHeight");
  3103.         var youtubeIdVal = node.getAttribute("youtubeId");
  3104.         var target = node.getAttribute("target");
  3105.         var window_color = node.getAttribute("windowColor");
  3106.         var htmlText = null;
  3107.         var htmlTextDoms = node.getElementsByTagName("cdata");
  3108.         if(htmlTextDoms != null && htmlTextDoms.length > 0) {
  3109.             htmlText = StringTools.trim(htmlTextDoms[0].childNodes[0].nodeValue);
  3110.             htmlText = ctx.getCData(htmlText);
  3111.             if(htmlText != null) {
  3112.                 if(htmlText.indexOf("iframe") != -1) {
  3113.                     var dom1 = new DOMParser();
  3114.                     var newHtmlDom = dom1.parseFromString(htmlText,"text/xml");
  3115.                     var iframe = newHtmlDom.getElementsByTagName("iframe")[0];
  3116.                     if(iframe != null) htmlText = "<iframe src=\"" + iframe.getAttribute("src") + "\" frameborder=\"0\" style=\"width:100%;height:100%\" scrolling=\"yes\" ></iframe>";
  3117.                 }
  3118.             }
  3119.         }
  3120.         try {
  3121.             var iframe = node.getElementsByTagName("iframe")[0];
  3122.             if(iframe != null) htmlText = "<iframe src=\"" + iframe.getAttribute("src") + "\" frameborder=\"0\" style=\"width:100%;height:100%\" ></iframe>";
  3123.         } catch( ex ) {
  3124.         }
  3125.         var link = new core.HotLink();
  3126.         link.pageNum = Std.parseInt(pageNumVal) - 1;
  3127.         link.x = Std.parseFloat(xVal);
  3128.         link.y = Std.parseFloat(yVal);
  3129.         link.width = Std.parseFloat(widthVal);
  3130.         link.height = Std.parseFloat(heightVal);
  3131.         link.htmlText = htmlText;
  3132.         if(popupWidthVal != null) link.popupWidth = Std.parseInt(popupWidthVal);
  3133.         if(popupHeightVal != null) link.popupHeight = Std.parseInt(popupHeightVal);
  3134.         link.youtubeId = youtubeIdVal;
  3135.         link.type = typeVal == null?"":typeVal;
  3136.         if(target != null) link.target = target == ""?"_blank":target;
  3137.         if(window_color != null) {
  3138.             window_color = StringTools.replace(window_color,"0x","#");
  3139.             link.window_color = window_color;
  3140.         }
  3141.         if(colorVal != null) {
  3142.             colorVal = StringTools.replace(colorVal,"0x","#");
  3143.             colorVal = StringTools.replace(colorVal,"0X","#");
  3144.             link.color = colorVal;
  3145.         }
  3146.         if(opacityVal != null) link.opacity = Std.parseFloat(opacityVal);
  3147.         if(destinationVal != null) link.destination = destinationVal;
  3148.         RunTime.book.hotlinks.push(link);
  3149.     }
  3150. }
  3151. RunTime.loadVideos = function() {
  3152.     if(RunTime.videoInfo == null) return;
  3153.     var index = 0;
  3154.     var i = RunTime.videoInfo.firstElement().elementsNamed("video");
  3155.     while(i.hasNext() == true) {
  3156.         var node = i.next();
  3157.         var pageNumVal = node.get("page");
  3158.         var xVal = node.get("x");
  3159.         var yVal = node.get("y");
  3160.         var widthVal = node.get("width");
  3161.         var heightVal = node.get("height");
  3162.         var autoPlayVal = node.get("autoPlay");
  3163.         var showControlVal = node.get("showControl");
  3164.         var autoRepeatVal = node.get("autoRepeat");
  3165.         var urlVal = node.get("url");
  3166.         var youtubeIdVal = node.get("youtubeId");
  3167.         var video = new core.VideoInfo();
  3168.         video.pageNum = Std.parseInt(pageNumVal) - 1;
  3169.         video.x = Std.parseFloat(xVal);
  3170.         video.y = Std.parseFloat(yVal);
  3171.         video.width = Std.parseFloat(widthVal);
  3172.         video.height = Std.parseFloat(heightVal);
  3173.         video.autoPlay = autoPlayVal == "true";
  3174.         video.showControl = showControlVal == "true";
  3175.         video.autoRepeat = autoRepeatVal == "true";
  3176.         video.url = urlVal;
  3177.         video.youtubeId = youtubeIdVal;
  3178.         video.id = "video_embed_" + Std.string(index);
  3179.         RunTime.book.videos.push(video);
  3180.         index++;
  3181.     }
  3182. }
  3183. RunTime.loadAudios = function() {
  3184.     if(RunTime.audioInfo == null) return;
  3185.     var index = 0;
  3186.     var i = RunTime.audioInfo.firstElement().elementsNamed("pages");
  3187.     if(i.hasNext() == true) {
  3188.         var index1 = 0;
  3189.         i = i.next().elementsNamed("sound");
  3190.         while(i.hasNext() == true) {
  3191.             var node = i.next();
  3192.             var pageNumVal = node.get("pageNumber");
  3193.             var urlVal = node.get("url");
  3194.             var audio = new core.AudioInfo();
  3195.             audio.url = urlVal;
  3196.             audio.pageNum = Std.parseInt(pageNumVal) - 1;
  3197.             audio.id = "audio_embed_" + Std.string(index1);
  3198.             index1++;
  3199.             RunTime.book.audios.push(audio);
  3200.         }
  3201.     }
  3202. }
  3203. RunTime.extractCData = function(txt) {
  3204.     if(txt == null) return null;
  3205.     var first = txt.indexOf("<![CDATA[");
  3206.     var last = txt.lastIndexOf("]]>");
  3207.     if(first < 0 || last < 0 || last < first) return null;
  3208.     return HxOverrides.substr(txt,first + "<![CDATA[".length,last - first - "<![CDATA[".length);
  3209. }
  3210. RunTime.loadButtons = function() {
  3211.     if(RunTime.buttonInfo == null) return;
  3212.     var i = RunTime.buttonInfo.firstElement().elementsNamed("button");
  3213.     while(i.hasNext() == true) {
  3214.         var node = i.next();
  3215.         var pageNumVal = node.get("page");
  3216.         var xVal = node.get("x");
  3217.         var yVal = node.get("y");
  3218.         var widthVal = node.get("width");
  3219.         var heightVal = node.get("height");
  3220.         var imageVal = node.get("image");
  3221.         var typeVal = node.get("type");
  3222.         var popupWidthVal = node.get("popupWidth");
  3223.         var popupHeightVal = node.get("popupHeight");
  3224.         var youtubeIdVal = node.get("youtubeId");
  3225.         var destinationVal = node.get("destination");
  3226.         var layer = node.get("layer");
  3227.         var textVal = "";
  3228.         var fontColorVal = "";
  3229.         var fontSizeVal = "";
  3230.         var window_color = node.get("windowColor");
  3231.         var target = node.get("target");
  3232.         if(node.get("text") != null) textVal = node.get("text");
  3233.         if(node.get("fontColor") != null) fontColorVal = node.get("fontColor");
  3234.         if(node.get("fontSize") != null) fontSizeVal = node.get("fontSize");
  3235.         var htmlText = RunTime.extractCData(node.toString());
  3236.         if(htmlText != null) {
  3237.             if(htmlText.indexOf("iframe") != -1) {
  3238.                 var dom = new DOMParser();
  3239.                 var newHtmlDom = dom.parseFromString(htmlText,"text/xml");
  3240.                 var iframe = newHtmlDom.getElementsByTagName("iframe")[0];
  3241.                 if(iframe != null) htmlText = "<iframe src=\"" + iframe.getAttribute("src") + "\" frameborder=\"0\" style=\"width:100%;height:100%\" scrolling=\"yes\" ></iframe>";
  3242.             }
  3243.         }
  3244.         try {
  3245.             var iframe = node.elementsNamed("iframe").next();
  3246.             if(iframe != null) htmlText = "<iframe src=\"" + iframe.get("src") + "\" frameborder=\"0\" style=\"width:100%;height:100%\" ></iframe>";
  3247.         } catch( ex ) {
  3248.         }
  3249.         var item = new core.ButtonInfo();
  3250.         item.pageNum = Std.parseInt(pageNumVal) - 1;
  3251.         item.x = Std.parseFloat(xVal);
  3252.         item.y = Std.parseFloat(yVal);
  3253.         item.width = Std.parseFloat(widthVal);
  3254.         item.height = Std.parseFloat(heightVal);
  3255.         item.layer = layer == null?"onpage":layer;
  3256.         item.htmlText = htmlText;
  3257.         if(popupWidthVal != null) item.popupWidth = Std.parseInt(popupWidthVal);
  3258.         if(popupHeightVal != null) item.popupHeight = Std.parseInt(popupHeightVal);
  3259.         item.youtubeId = youtubeIdVal;
  3260.         item.destination = destinationVal;
  3261.         item.type = typeVal == null?"":typeVal;
  3262.         item.image = imageVal;
  3263.         item.text = textVal;
  3264.         if(target != null) item.target = target == ""?"_blank":target;
  3265.         if(window_color != null) item.window_color = window_color;
  3266.         if(fontColorVal != "") item.fontColor = fontColorVal;
  3267.         if(fontSizeVal != "") item.fontSize = fontSizeVal;
  3268.         RunTime.book.buttons.push(item);
  3269.     }
  3270. }
  3271. RunTime.getInputAndJumpToPage = function() {
  3272.     RunTime.flipBook.stopFlip();
  3273.     var t = RunTime.flipBook.tbPage;
  3274.     var val = t.value;
  3275.     val = StringTools.trim(val);
  3276.     var num = RunTime.flipBook.currentPageNum;
  3277.     if(val != "") num = Std.parseInt(val) - 1;
  3278.     if(num < 0) num = 0; else if(num > RunTime.book.pages.length - 1) num = RunTime.book.pages.length - 1;
  3279.     RunTime.flipBook.tbPage.setAttribute("value",Std.string(num + 1));
  3280.     RunTime.flipBook.turnToPage(num);
  3281.     RunTime.flipBook.tbPage.blur();
  3282. }
  3283. RunTime.getPage = function(currentPageNum,pageOffset,useNewDrawParams) {
  3284.     if(useNewDrawParams == null) useNewDrawParams = true;
  3285.     if(pageOffset == null) pageOffset = 0;
  3286.     if(RunTime.book == null || RunTime.book.pages == null) return null;
  3287.     var num = currentPageNum + pageOffset;
  3288.     if(num < 0 || num > RunTime.book.pages.length - 1) return null;
  3289.     var page = RunTime.book.pages[num];
  3290.     page.pageOffset = pageOffset;
  3291.     if(useNewDrawParams == true) page.drawParams = RunTime.getDrawParams();
  3292.     if(RunTime.singlePage) {
  3293.         RunTime.flipBook.zoomLeftPage.width = page.drawParams.dw | 0;
  3294.         RunTime.flipBook.zoomLeftPage.height = page.drawParams.dh | 0;
  3295.         RunTime.flipBook.zoomLeftPage.style.left = Std.string(page.drawParams.dx) + "px";
  3296.         RunTime.flipBook.zoomLeftPage.style.top = Std.string(page.drawParams.dy) + "px";
  3297.         RunTime.flipBook.leftPageLock.style.width = (page.drawParams.dw | 0) + "px";
  3298.         RunTime.flipBook.leftPageLock.style.height = (page.drawParams.dh | 0) + "px";
  3299.         RunTime.flipBook.leftPageLock.style.left = Std.string(page.drawParams.dx) + "px";
  3300.         RunTime.flipBook.leftPageLock.style.top = Std.string(page.drawParams.dy) + "px";
  3301.         RunTime.flipBook.leftLockIcon.style.left = ((page.drawParams.dw - 128) / 2 | 0) + "px";
  3302.         RunTime.flipBook.leftLockIcon.style.top = ((page.drawParams.dh - 128) / 2 | 0) + "px";
  3303.     }
  3304.     return page;
  3305. }
  3306. RunTime.getDrawParams = function(layout) {
  3307.     if(layout == null) layout = 0;
  3308.     var dp = new core.DrawParams();
  3309.     var im = new orc.utils.ImageMetricHelper(RunTime.book.pageWidth,RunTime.book.pageHeight);
  3310.     var cw = RunTime.clientWidth;
  3311.     if(layout != 0) cw = 0.5 * cw;
  3312.     var ch = RunTime.clientHeight;
  3313.     var scale = im.getMaxFitScale(cw,ch);
  3314.     var dw = scale * RunTime.book.pageWidth;
  3315.     var dh = scale * RunTime.book.pageHeight;
  3316.     var dx = 0.5 * (cw - dw);
  3317.     if(layout != 0) {
  3318.         if(RunTime.book.rightToLeft) dx = layout > 0?cw - dw:cw; else dx = layout < 0?cw - dw:cw;
  3319.     }
  3320.     var dy = 0.5 * (ch - dh);
  3321.     var sx = 0;
  3322.     var sy = 0;
  3323.     var sw = RunTime.book.pageWidth;
  3324.     var sh = RunTime.book.pageHeight;
  3325.     dp.sx = sx;
  3326.     dp.sy = sy;
  3327.     dp.sw = sw;
  3328.     dp.sh = sh;
  3329.     dp.dx = dx;
  3330.     dp.dy = dy;
  3331.     dp.dw = dw;
  3332.     dp.dh = dh;
  3333.     return dp;
  3334. }
  3335. RunTime.getGolobaDrawParams = function() {
  3336.     var dp = new core.DrawParams();
  3337.     var im = new orc.utils.ImageMetricHelper(RunTime.book.pageWidth * 2,RunTime.book.pageHeight);
  3338.     var cw = RunTime.clientWidth;
  3339.     var ch = RunTime.clientHeight;
  3340.     var scale = im.getMaxFitScale(cw,ch);
  3341.     var dw = scale * RunTime.book.pageWidth * 2;
  3342.     var dh = scale * RunTime.book.pageHeight;
  3343.     var dx = 0.5 * (cw - dw) * 2;
  3344.     var dy = 0.5 * (ch - dh) * 2;
  3345.     var sx = 0;
  3346.     var sy = 0;
  3347.     var sw = RunTime.book.pageWidth * 2;
  3348.     var sh = RunTime.book.pageHeight;
  3349.     dp.sx = sx;
  3350.     dp.sy = sy;
  3351.     dp.sw = sw;
  3352.     dp.sh = sh;
  3353.     dp.dx = dx;
  3354.     dp.dy = dy;
  3355.     dp.dw = dw;
  3356.     dp.dh = dh;
  3357.     return dp;
  3358. }
  3359. RunTime.saveLocal = function(key,val) {
  3360. }
  3361. RunTime.getLocal = function(key) {
  3362.     return "";
  3363. }
  3364. RunTime.setUpdateFlag = function(bookId) {
  3365.     var prefix = bookId == null?RunTime.book.bookId:bookId;
  3366.     RunTime.saveLocal(prefix + "-" + "uploadFlag","1");
  3367. }
  3368. RunTime.getAndResetUpdateFlag = function() {
  3369.     var val = RunTime.getLocal(RunTime.book.bookId + "-" + "uploadFlag");
  3370.     RunTime.saveLocal(RunTime.book.bookId + "-" + "uploadFlag","");
  3371.     return val == "1";
  3372. }
  3373. RunTime.saveCurrentPageNum = function() {
  3374.     RunTime.savePageNum(Std.string(RunTime.flipBook.getCurrentPageNum()));
  3375. }
  3376. RunTime.savePageNum = function(val,bookId) {
  3377.     var prefix = bookId == null?RunTime.book.bookId:bookId;
  3378.     RunTime.saveLocal(prefix + "-" + "page",val);
  3379. }
  3380. RunTime.getAndResetSavedPageNum = function() {
  3381.     var val = RunTime.getLocal(RunTime.book.bookId + "-" + "page");
  3382.     RunTime.savePageNum("");
  3383.     if(val == null || val == "") return 0; else return Std.parseInt(val);
  3384. }
  3385. RunTime.saveBottomBarVisible = function(val) {
  3386.     if(val == true) RunTime.saveLocal(RunTime.book.bookId + "-" + "bottomBarVisible","true"); else RunTime.saveLocal(RunTime.book.bookId + "-" + "bottomBarVisible","false");
  3387. }
  3388. RunTime.getBottomBarVisible = function() {
  3389.     return RunTime.getLocal(RunTime.book.bookId + "-" + "bottomBarVisible") == "true";
  3390. }
  3391. RunTime.encrypt = function(src) {
  3392.     return RunTime.encryptKey(src,RunTime.key);
  3393. }
  3394. RunTime.encryptKey = function(src,key) {
  3395.     var n = 0;
  3396.     var rtn = "";
  3397.     var _g1 = 0, _g = src.length - 1;
  3398.     while(_g1 < _g) {
  3399.         var i = _g1++;
  3400.         var c = HxOverrides.cca(src,i) + HxOverrides.cca(key,n);
  3401.         var s = String.fromCharCode(c);
  3402.         rtn += s;
  3403.         n++;
  3404.         if(n >= key.length - 1) n = 0;
  3405.     }
  3406.     if(src.length > 0) rtn = rtn + HxOverrides.substr(src,src.length - 1,null);
  3407.     return RunTime.encode64(rtn);
  3408. }
  3409. RunTime.encode64 = function(txt,padding) {
  3410.     if(padding == null) padding = true;
  3411.     var bytes = haxe.io.Bytes.alloc(txt.length);
  3412.     var _g1 = 0, _g = txt.length;
  3413.     while(_g1 < _g) {
  3414.         var i = _g1++;
  3415.         var c = txt.charCodeAt(i);
  3416.         bytes.b[i] = c & 255;
  3417.     }
  3418.     var c = new haxe.BaseCode(haxe.io.Bytes.ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
  3419.     var base64 = c.encodeBytes(bytes).toString();
  3420.     if(padding == true) {
  3421.         var remainder = base64.length % 4;
  3422.         if(remainder > 1) base64 += "=";
  3423.         if(remainder == 2) base64 += "=";
  3424.     }
  3425.     return base64;
  3426. }
  3427. RunTime.decode64 = function(txt) {
  3428.     var paddingSize = -1;
  3429.     if(txt.charAt(txt.length - 2) == "=") paddingSize = 2; else if(txt.charAt(txt.length - 1) == "=") paddingSize = 1;
  3430.     if(paddingSize != -1) txt = HxOverrides.substr(txt,0,txt.length - paddingSize);
  3431.     var c = new haxe.BaseCode(haxe.io.Bytes.ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
  3432.     return c.decodeString(txt);
  3433. }
  3434. RunTime.calcKey = function(w,h) {
  3435.     var val = Std.string(w * h);
  3436.     val = HxOverrides.substr(val,val.length - 3,null) + HxOverrides.substr(val,0,2);
  3437.     var n = "";
  3438.     var _g1 = 0, _g = val.length;
  3439.     while(_g1 < _g) {
  3440.         var i = _g1++;
  3441.         var c = HxOverrides.cca(val,i) / 2 | 0;
  3442.         n = n + StringTools.hex(c);
  3443.     }
  3444.     return n.toUpperCase();
  3445. }
  3446. RunTime.clearPopupContents = function() {
  3447.     js.Lib.document.getElementById("maskPopup").style.display = "none";
  3448.     js.Lib.document.getElementById("cvsOthers").innerHTML = "";
  3449.     RunTime.flipBook.resetNoteButton();
  3450.     RunTime.flipBook.resetHighlightButton();
  3451. }
  3452. RunTime.isPopupModal = function() {
  3453.     return js.Lib.document.getElementById("maskPopup").style.display == "none"?false:true;
  3454. }
  3455. RunTime.clearAudio = function() {
  3456.     js.Lib.document.getElementById("cvsAudio").innerHTML = "";
  3457. }
  3458. RunTime.clearBgAudio = function() {
  3459.     RunTime.clearLeftBgAudio();
  3460.     RunTime.clearRightBgAudio();
  3461. }
  3462. RunTime.clearLeftBgAudio = function() {
  3463.     js.Lib.document.getElementById("cvsLeftPageBgAudio").innerHTML = "";
  3464. }
  3465. RunTime.clearRightBgAudio = function() {
  3466.     js.Lib.document.getElementById("cvsRightPageBgAudio").innerHTML = "";
  3467. }
  3468. RunTime.showPopupMaskLayer = function() {
  3469.     js.Lib.document.getElementById("maskPopup").style.display = "inline";
  3470. }
  3471. RunTime.playAudio = function() {
  3472.     var item = js.Lib.document.getElementById("cvsAudio").getElementsByTagName("audio")[0];
  3473.     item.play();
  3474. }
  3475. RunTime.playVideo = function() {
  3476.     var item = js.Lib.document.getElementById("cvsOthers").getElementsByTagName("video")[0];
  3477.     item.play();
  3478. }
  3479. RunTime.setOffset = function(dom,left,top) {
  3480.     var l = Math.round(left);
  3481.     var t = Math.round(top);
  3482.     dom.style.left = Std.string(l) + "px";
  3483.     dom.style.top = Std.string(t) + "px";
  3484. }
  3485. RunTime.useAnalyticsUA = function(ua,id) {
  3486.     if(RunTime.isNullOrEmpty(ua)) return;
  3487.     try {
  3488.         RunTime.trackerId = id;
  3489.         var gat = _gat;
  3490.         RunTime.tracker = gat._getTracker(ua);
  3491.         RunTime.tracker._initData();
  3492.     } catch( ex ) {
  3493.     }
  3494. }
  3495. RunTime.log = function(action,msg) {
  3496.     if(RunTime.tracker) RunTime.tracker._trackPageview(RunTime.trackerId + "/" + action + "/" + msg);
  3497.     var e = eval;
  3498.     var t = "if(typeof(customTrackPageView)=='function'){customTrackPageView('" + action + "','" + msg + "')}";
  3499.     e(t);
  3500. }
  3501. RunTime.logPageView = function(pageNum) {
  3502.     if(pageNum > 0) RunTime.log("page",Std.string(pageNum));
  3503. }
  3504. RunTime.logClickLink = function(url,url2) {
  3505.     if(RunTime.isNullOrEmpty(url) && RunTime.isNullOrEmpty(url2)) return;
  3506.     RunTime.log("link",RunTime.isNullOrEmpty(url) == false?url:url2);
  3507. }
  3508. RunTime.logVideoView = function(url,url2) {
  3509.     if(RunTime.isNullOrEmpty(url) && RunTime.isNullOrEmpty(url2)) return;
  3510.     url = RunTime.removePrefix(url);
  3511.     RunTime.log("video",RunTime.isNullOrEmpty(url) == false?url:url2);
  3512. }
  3513. RunTime.isNullOrEmpty = function(txt) {
  3514.     return txt == null || txt == "" || txt == "undefined";
  3515. }
  3516. RunTime.logAudioView = function(url) {
  3517.     if(url == null || url == "") return;
  3518.     url = RunTime.removePrefix(url);
  3519.     RunTime.log("audio",url);
  3520. }
  3521. RunTime.logSearch = function(keyword) {
  3522.     if(keyword == null || keyword == "") return;
  3523.     RunTime.log("search",keyword);
  3524. }
  3525. RunTime.removePrefix = function(url) {
  3526.     if(url == null || url == "") return url; else if(url.indexOf("http") == 0) return url; else {
  3527.         var i = url.lastIndexOf("/");
  3528.         return HxOverrides.substr(url,i + 1,null);
  3529.     }
  3530. }
  3531. RunTime.readLocalBookmarks = function() {
  3532.     var bookmarks = new Array();
  3533.     var i = 0;
  3534.     var _g1 = 0, _g = localStorage.length;
  3535.     while(_g1 < _g) {
  3536.         var i1 = _g1++;
  3537.         var szKey = localStorage.key(i1);
  3538.         if(szKey.indexOf(RunTime.kvPrex) == 0) {
  3539.             if(szKey.indexOf("@$bm$@") != -1) {
  3540.                 var bookmark = new core.Bookmark();
  3541.                 bookmark.fillData(szKey,localStorage.getItem(szKey));
  3542.                 bookmarks.push(bookmark);
  3543.                 RunTime.book.bookmarks.push(bookmark);
  3544.             }
  3545.         }
  3546.     }
  3547.     return bookmarks;
  3548. }
  3549. RunTime.readLocalHighLights = function() {
  3550.     var highlights = new Array();
  3551.     var i = 0;
  3552.     var _g1 = 0, _g = localStorage.length;
  3553.     while(_g1 < _g) {
  3554.         var i1 = _g1++;
  3555.         var szKey = localStorage.key(i1);
  3556.         if(szKey.indexOf(RunTime.kvPrex) == 0) {
  3557.             if(szKey.indexOf("@$ht$@") != -1) {
  3558.                 var highlight = new core.HighLight();
  3559.                 highlight.fillData(szKey,localStorage.getItem(szKey));
  3560.                 highlights.push(highlight);
  3561.                 RunTime.book.highlights.push(highlight);
  3562.             }
  3563.         }
  3564.     }
  3565.     RunTime.highLights = highlights;
  3566.     if(RunTime.flipBook != null) {
  3567.         RunTime.flipBook.loadCtxHighLights();
  3568.         RunTime.flipBook.bookContext.render();
  3569.     }
  3570.     return highlights;
  3571. }
  3572. RunTime.updateHighLightNote = function(text,color) {
  3573.     if(RunTime.currentHighLight != null) {
  3574.         RunTime.currentHighLight.updateText(text,color);
  3575.         RunTime.flipBook.resetHighlightButton();
  3576.         RunTime.flipBook.bookContext.render();
  3577.     }
  3578. }
  3579. RunTime.deleteHighLight = function() {
  3580.     if(RunTime.currentHighLight != null) {
  3581.         RunTime.currentHighLight.remove();
  3582.         HxOverrides.remove(RunTime.book.highlights,RunTime.currentHighLight);
  3583.         RunTime.currentHighLight = null;
  3584.         RunTime.flipBook.loadCtxHighLights();
  3585.         RunTime.flipBook.bookContext.render();
  3586.         RunTime.flipBook.resetHighlightButton();
  3587.     }
  3588. }
  3589. RunTime.readLocalNotes = function() {
  3590.     var notes = new Array();
  3591.     var i = 0;
  3592.     var _g1 = 0, _g = localStorage.length;
  3593.     while(_g1 < _g) {
  3594.         var i1 = _g1++;
  3595.         var szKey = localStorage.key(i1);
  3596.         if(szKey.indexOf(RunTime.kvPrex) == 0) {
  3597.             if(szKey.indexOf("@$ni$@") != -1) {
  3598.                 var note = new core.NoteIcon();
  3599.                 note.fillData(szKey,localStorage.getItem(szKey));
  3600.                 notes.push(note);
  3601.                 RunTime.book.notes.push(note);
  3602.             }
  3603.         }
  3604.     }
  3605.     RunTime.notes = notes;
  3606.     if(RunTime.flipBook != null) {
  3607.         RunTime.flipBook.loadCtxNotes();
  3608.         RunTime.flipBook.bookContext.render();
  3609.     }
  3610.     return notes;
  3611. }
  3612. RunTime.updateNote = function(text) {
  3613.     if(RunTime.currentNote != null) {
  3614.         RunTime.currentNote.updateText(text);
  3615.         RunTime.flipBook.resetNoteButton();
  3616.     }
  3617. }
  3618. RunTime.deleteNote = function() {
  3619.     if(RunTime.currentNote != null) {
  3620.         RunTime.currentNote.remove();
  3621.         HxOverrides.remove(RunTime.book.notes,RunTime.currentNote);
  3622.         RunTime.currentNote = null;
  3623.         RunTime.flipBook.loadCtxNotes();
  3624.         RunTime.flipBook.bookContext.render();
  3625.         RunTime.flipBook.resetNoteButton();
  3626.     }
  3627. }
  3628. RunTime.showDebugMsg = function(msg) {
  3629.     var div = js.Lib.document.createElement("div");
  3630.     div.style.position = "absolute";
  3631.     div.style.zIndex = 9999;
  3632.     div.style.background = "white";
  3633.     div.style.border = "1px solid #000";
  3634.     div.style.display = "block";
  3635.     var debugTimer = new haxe.Timer(300);
  3636.     debugTimer.run = function() {
  3637.         div.style.top = "100px";
  3638.         div.style.left = "100px";
  3639.         div.innerHTML = "" + Std.string(msg);
  3640.         js.Lib.document.body.appendChild(div);
  3641.     };
  3642. }
  3643. RunTime.resizeSlide = function(p1,p2,p3,p4,p5) {
  3644.     var scale = p3 / p1.height;
  3645.     var leftVal = (p2 - p1.width * scale) / 2;
  3646.     js.Lib.document.getElementById(p4).style.width = (p1.width * scale | 0) + "px";
  3647.     js.Lib.document.getElementById(p4).style.marginLeft = leftVal + "px";
  3648. }
  3649. var Std = function() { }
  3650. Std.__name__ = true;
  3651. Std["is"] = function(v,t) {
  3652.     return js.Boot.__instanceof(v,t);
  3653. }
  3654. Std.string = function(s) {
  3655.     return js.Boot.__string_rec(s,"");
  3656. }
  3657. Std["int"] = function(x) {
  3658.     return x | 0;
  3659. }
  3660. Std.parseInt = function(x) {
  3661.     var v = parseInt(x,10);
  3662.     if(v == 0 && (HxOverrides.cca(x,1) == 120 || HxOverrides.cca(x,1) == 88)) v = parseInt(x);
  3663.     if(isNaN(v)) return null;
  3664.     return v;
  3665. }
  3666. Std.parseFloat = function(x) {
  3667.     return parseFloat(x);
  3668. }
  3669. Std.random = function(x) {
  3670.     return Math.floor(Math.random() * x);
  3671. }
  3672. var StringBuf = function() {
  3673.     this.b = "";
  3674. };
  3675. StringBuf.__name__ = true;
  3676. StringBuf.prototype = {
  3677.     toString: function() {
  3678.         return this.b;
  3679.     }
  3680.     ,addSub: function(s,pos,len) {
  3681.         this.b += HxOverrides.substr(s,pos,len);
  3682.     }
  3683.     ,addChar: function(c) {
  3684.         this.b += String.fromCharCode(c);
  3685.     }
  3686.     ,add: function(x) {
  3687.         this.b += Std.string(x);
  3688.     }
  3689.     ,__class__: StringBuf
  3690. }
  3691. var StringTools = function() { }
  3692. StringTools.__name__ = true;
  3693. StringTools.urlEncode = function(s) {
  3694.     return encodeURIComponent(s);
  3695. }
  3696. StringTools.urlDecode = function(s) {
  3697.     return decodeURIComponent(s.split("+").join(" "));
  3698. }
  3699. StringTools.htmlEscape = function(s) {
  3700.     return s.split("&").join("&").split("<").join("<").split(">").join(">");
  3701. }
  3702. StringTools.htmlUnescape = function(s) {
  3703.     return s.split(">").join(">").split("<").join("<").split("&").join("&");
  3704. }
  3705. StringTools.startsWith = function(s,start) {
  3706.     return s.length >= start.length && HxOverrides.substr(s,0,start.length) == start;
  3707. }
  3708. StringTools.endsWith = function(s,end) {
  3709.     var elen = end.length;
  3710.     var slen = s.length;
  3711.     return slen >= elen && HxOverrides.substr(s,slen - elen,elen) == end;
  3712. }
  3713. StringTools.isSpace = function(s,pos) {
  3714.     var c = HxOverrides.cca(s,pos);
  3715.     return c >= 9 && c <= 13 || c == 32;
  3716. }
  3717. StringTools.ltrim = function(s) {
  3718.     var l = s.length;
  3719.     var r = 0;
  3720.     while(r < l && StringTools.isSpace(s,r)) r++;
  3721.     if(r > 0) return HxOverrides.substr(s,r,l - r); else return s;
  3722. }
  3723. StringTools.rtrim = function(s) {
  3724.     var l = s.length;
  3725.     var r = 0;
  3726.     while(r < l && StringTools.isSpace(s,l - r - 1)) r++;
  3727.     if(r > 0) return HxOverrides.substr(s,0,l - r); else return s;
  3728. }
  3729. StringTools.trim = function(s) {
  3730.     return StringTools.ltrim(StringTools.rtrim(s));
  3731. }
  3732. StringTools.rpad = function(s,c,l) {
  3733.     var sl = s.length;
  3734.     var cl = c.length;
  3735.     while(sl < l) if(l - sl < cl) {
  3736.         s += HxOverrides.substr(c,0,l - sl);
  3737.         sl = l;
  3738.     } else {
  3739.         s += c;
  3740.         sl += cl;
  3741.     }
  3742.     return s;
  3743. }
  3744. StringTools.lpad = function(s,c,l) {
  3745.     var ns = "";
  3746.     var sl = s.length;
  3747.     if(sl >= l) return s;
  3748.     var cl = c.length;
  3749.     while(sl < l) if(l - sl < cl) {
  3750.         ns += HxOverrides.substr(c,0,l - sl);
  3751.         sl = l;
  3752.     } else {
  3753.         ns += c;
  3754.         sl += cl;
  3755.     }
  3756.     return ns + s;
  3757. }
  3758. StringTools.replace = function(s,sub,by) {
  3759.     return s.split(sub).join(by);
  3760. }
  3761. StringTools.hex = function(n,digits) {
  3762.     var s = "";
  3763.     var hexChars = "0123456789ABCDEF";
  3764.     do {
  3765.         s = hexChars.charAt(n & 15) + s;
  3766.         n >>>= 4;
  3767.     } while(n > 0);
  3768.     if(digits != null) while(s.length < digits) s = "0" + s;
  3769.     return s;
  3770. }
  3771. StringTools.fastCodeAt = function(s,index) {
  3772.     return s.charCodeAt(index);
  3773. }
  3774. StringTools.isEOF = function(c) {
  3775.     return c != c;
  3776. }
  3777. var XMLHttpRequestResponseType = { __ename__ : true, __constructs__ : ["arraybuffer","blob","document","json","text"] }
  3778. XMLHttpRequestResponseType.arraybuffer = ["arraybuffer",0];
  3779. XMLHttpRequestResponseType.arraybuffer.toString = $estr;
  3780. XMLHttpRequestResponseType.arraybuffer.__enum__ = XMLHttpRequestResponseType;
  3781. XMLHttpRequestResponseType.blob = ["blob",1];
  3782. XMLHttpRequestResponseType.blob.toString = $estr;
  3783. XMLHttpRequestResponseType.blob.__enum__ = XMLHttpRequestResponseType;
  3784. XMLHttpRequestResponseType.document = ["document",2];
  3785. XMLHttpRequestResponseType.document.toString = $estr;
  3786. XMLHttpRequestResponseType.document.__enum__ = XMLHttpRequestResponseType;
  3787. XMLHttpRequestResponseType.json = ["json",3];
  3788. XMLHttpRequestResponseType.json.toString = $estr;
  3789. XMLHttpRequestResponseType.json.__enum__ = XMLHttpRequestResponseType;
  3790. XMLHttpRequestResponseType.text = ["text",4];
  3791. XMLHttpRequestResponseType.text.toString = $estr;
  3792. XMLHttpRequestResponseType.text.__enum__ = XMLHttpRequestResponseType;
  3793. var Xml = function() {
  3794. };
  3795. Xml.__name__ = true;
  3796. Xml.parse = function(str) {
  3797.     return haxe.xml.Parser.parse(str);
  3798. }
  3799. Xml.createElement = function(name) {
  3800.     var r = new Xml();
  3801.     r.nodeType = Xml.Element;
  3802.     r._children = new Array();
  3803.     r._attributes = new Hash();
  3804.     r.setNodeName(name);
  3805.     return r;
  3806. }
  3807. Xml.createPCData = function(data) {
  3808.     var r = new Xml();
  3809.     r.nodeType = Xml.PCData;
  3810.     r.setNodeValue(data);
  3811.     return r;
  3812. }
  3813. Xml.createCData = function(data) {
  3814.     var r = new Xml();
  3815.     r.nodeType = Xml.CData;
  3816.     r.setNodeValue(data);
  3817.     return r;
  3818. }
  3819. Xml.createComment = function(data) {
  3820.     var r = new Xml();
  3821.     r.nodeType = Xml.Comment;
  3822.     r.setNodeValue(data);
  3823.     return r;
  3824. }
  3825. Xml.createDocType = function(data) {
  3826.     var r = new Xml();
  3827.     r.nodeType = Xml.DocType;
  3828.     r.setNodeValue(data);
  3829.     return r;
  3830. }
  3831. Xml.createProlog = function(data) {
  3832.     var r = new Xml();
  3833.     r.nodeType = Xml.Prolog;
  3834.     r.setNodeValue(data);
  3835.     return r;
  3836. }
  3837. Xml.createDocument = function() {
  3838.     var r = new Xml();
  3839.     r.nodeType = Xml.Document;
  3840.     r._children = new Array();
  3841.     return r;
  3842. }
  3843. Xml.prototype = {
  3844.     toString: function() {
  3845.         if(this.nodeType == Xml.PCData) return this._nodeValue;
  3846.         if(this.nodeType == Xml.CData) return "<![CDATA[" + this._nodeValue + "]]>";
  3847.         if(this.nodeType == Xml.Comment) return "<!--" + this._nodeValue + "-->";
  3848.         if(this.nodeType == Xml.DocType) return "<!DOCTYPE " + this._nodeValue + ">";
  3849.         if(this.nodeType == Xml.Prolog) return "<?" + this._nodeValue + "?>";
  3850.         var s = new StringBuf();
  3851.         if(this.nodeType == Xml.Element) {
  3852.             s.b += Std.string("<");
  3853.             s.b += Std.string(this._nodeName);
  3854.             var $it0 = this._attributes.keys();
  3855.             while( $it0.hasNext() ) {
  3856.                 var k = $it0.next();
  3857.                 s.b += Std.string(" ");
  3858.                 s.b += Std.string(k);
  3859.                 s.b += Std.string("=\"");
  3860.                 s.b += Std.string(this._attributes.get(k));
  3861.                 s.b += Std.string("\"");
  3862.             }
  3863.             if(this._children.length == 0) {
  3864.                 s.b += Std.string("/>");
  3865.                 return s.b;
  3866.             }
  3867.             s.b += Std.string(">");
  3868.         }
  3869.         var $it1 = this.iterator();
  3870.         while( $it1.hasNext() ) {
  3871.             var x = $it1.next();
  3872.             s.b += Std.string(x.toString());
  3873.         }
  3874.         if(this.nodeType == Xml.Element) {
  3875.             s.b += Std.string("</");
  3876.             s.b += Std.string(this._nodeName);
  3877.             s.b += Std.string(">");
  3878.         }
  3879.         return s.b;
  3880.     }
  3881.     ,insertChild: function(x,pos) {
  3882.         if(this._children == null) throw "bad nodetype";
  3883.         if(x._parent != null) HxOverrides.remove(x._parent._children,x);
  3884.         x._parent = this;
  3885.         this._children.splice(pos,0,x);
  3886.     }
  3887.     ,removeChild: function(x) {
  3888.         if(this._children == null) throw "bad nodetype";
  3889.         var b = HxOverrides.remove(this._children,x);
  3890.         if(b) x._parent = null;
  3891.         return b;
  3892.     }
  3893.     ,addChild: function(x) {
  3894.         if(this._children == null) throw "bad nodetype";
  3895.         if(x._parent != null) HxOverrides.remove(x._parent._children,x);
  3896.         x._parent = this;
  3897.         this._children.push(x);
  3898.     }
  3899.     ,firstElement: function() {
  3900.         if(this._children == null) throw "bad nodetype";
  3901.         var cur = 0;
  3902.         var l = this._children.length;
  3903.         while(cur < l) {
  3904.             var n = this._children[cur];
  3905.             if(n.nodeType == Xml.Element) return n;
  3906.             cur++;
  3907.         }
  3908.         return null;
  3909.     }
  3910.     ,firstChild: function() {
  3911.         if(this._children == null) throw "bad nodetype";
  3912.         return this._children[0];
  3913.     }
  3914.     ,elementsNamed: function(name) {
  3915.         if(this._children == null) throw "bad nodetype";
  3916.         return { cur : 0, x : this._children, hasNext : function() {
  3917.             var k = this.cur;
  3918.             var l = this.x.length;
  3919.             while(k < l) {
  3920.                 var n = this.x[k];
  3921.                 if(n.nodeType == Xml.Element && n._nodeName == name) break;
  3922.                 k++;
  3923.             }
  3924.             this.cur = k;
  3925.             return k < l;
  3926.         }, next : function() {
  3927.             var k = this.cur;
  3928.             var l = this.x.length;
  3929.             while(k < l) {
  3930.                 var n = this.x[k];
  3931.                 k++;
  3932.                 if(n.nodeType == Xml.Element && n._nodeName == name) {
  3933.                     this.cur = k;
  3934.                     return n;
  3935.                 }
  3936.             }
  3937.             return null;
  3938.         }};
  3939.     }
  3940.     ,elements: function() {
  3941.         if(this._children == null) throw "bad nodetype";
  3942.         return { cur : 0, x : this._children, hasNext : function() {
  3943.             var k = this.cur;
  3944.             var l = this.x.length;
  3945.             while(k < l) {
  3946.                 if(this.x[k].nodeType == Xml.Element) break;
  3947.                 k += 1;
  3948.             }
  3949.             this.cur = k;
  3950.             return k < l;
  3951.         }, next : function() {
  3952.             var k = this.cur;
  3953.             var l = this.x.length;
  3954.             while(k < l) {
  3955.                 var n = this.x[k];
  3956.                 k += 1;
  3957.                 if(n.nodeType == Xml.Element) {
  3958.                     this.cur = k;
  3959.                     return n;
  3960.                 }
  3961.             }
  3962.             return null;
  3963.         }};
  3964.     }
  3965.     ,iterator: function() {
  3966.         if(this._children == null) throw "bad nodetype";
  3967.         return { cur : 0, x : this._children, hasNext : function() {
  3968.             return this.cur < this.x.length;
  3969.         }, next : function() {
  3970.             return this.x[this.cur++];
  3971.         }};
  3972.     }
  3973.     ,attributes: function() {
  3974.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3975.         return this._attributes.keys();
  3976.     }
  3977.     ,exists: function(att) {
  3978.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3979.         return this._attributes.exists(att);
  3980.     }
  3981.     ,remove: function(att) {
  3982.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3983.         this._attributes.remove(att);
  3984.     }
  3985.     ,set: function(att,value) {
  3986.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3987.         this._attributes.set(att,value);
  3988.     }
  3989.     ,get: function(att) {
  3990.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3991.         return this._attributes.get(att);
  3992.     }
  3993.     ,getParent: function() {
  3994.         return this._parent;
  3995.     }
  3996.     ,setNodeValue: function(v) {
  3997.         if(this.nodeType == Xml.Element || this.nodeType == Xml.Document) throw "bad nodeType";
  3998.         return this._nodeValue = v;
  3999.     }
  4000.     ,getNodeValue: function() {
  4001.         if(this.nodeType == Xml.Element || this.nodeType == Xml.Document) throw "bad nodeType";
  4002.         return this._nodeValue;
  4003.     }
  4004.     ,setNodeName: function(n) {
  4005.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  4006.         return this._nodeName = n;
  4007.     }
  4008.     ,getNodeName: function() {
  4009.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  4010.         return this._nodeName;
  4011.     }
  4012.     ,__class__: Xml
  4013. }
  4014. var Xml2Html = function() {
  4015. };
  4016. Xml2Html.__name__ = true;
  4017. Xml2Html.prototype = {
  4018.     prepareXmlAsHtml: function(txt) {
  4019.         this.map = new Array();
  4020.         txt = StringTools.replace(txt,"<![CDATA[","]]>");
  4021.         var lines = txt.split("]]>");
  4022.         if(lines.length == 0) return txt;
  4023.         var buff = new StringBuf();
  4024.         var k = 0;
  4025.         var _g1 = 0, _g = lines.length;
  4026.         while(_g1 < _g) {
  4027.             var i = _g1++;
  4028.             var val = lines[i];
  4029.             if(i % 2 == 0) buff.b += Std.string(val); else {
  4030.                 var key = Std.string(k);
  4031.                 buff.b += Std.string("<cdata>" + key + "</cdata>");
  4032.                 var cdata = new CData();
  4033.                 cdata.key = key;
  4034.                 cdata.val = val;
  4035.                 this.map.push(cdata);
  4036.                 k++;
  4037.             }
  4038.         }
  4039.         return buff.b;
  4040.     }
  4041.     ,getCData: function(key) {
  4042.         if(this.map == null) return null;
  4043.         var _g1 = 0, _g = this.map.length;
  4044.         while(_g1 < _g) {
  4045.             var i = _g1++;
  4046.             var item = this.map[i];
  4047.             if(item.key == key) return item.val;
  4048.         }
  4049.         return null;
  4050.     }
  4051.     ,__class__: Xml2Html
  4052. }
  4053. var Zoom = function() { }
  4054. Zoom.__name__ = true;
  4055. Zoom.getContext = function() {
  4056.     return Zoom.cvsZoom.getContext("2d");
  4057. }
  4058. Zoom.Load = function() {
  4059.     Zoom.cvsZoomDom = js.Lib.document.getElementById("cvsZoom");
  4060.     Zoom.mask = js.Lib.document.getElementById("mask");
  4061.     Zoom.maskPopup = js.Lib.document.getElementById("maskPopup");
  4062.     Zoom.maskPopup.onclick = Zoom.forbidden;
  4063.     Zoom.maskPopup.ondblclick = Zoom.onDblClick;
  4064.     Zoom.maskPopup.ontouchstart = Zoom.forbidden;
  4065.     Zoom.maskPopup.ontouchmove = Zoom.forbidden;
  4066.     Zoom.maskPopup.ontouchend = Zoom.forbidden;
  4067.     Zoom.maskPopup.ontouchcancel = Zoom.forbidden;
  4068.     Zoom.maskPopup.gestureend = Zoom.forbidden;
  4069.     Zoom.maskPopup.gesturestart = Zoom.forbidden;
  4070.     Zoom.maskPopup.gesturechange = Zoom.forbidden;
  4071.     Zoom.maskPopup.onscroll = Zoom.forbidden;
  4072.     Zoom.maskPopup.onmousewheel = Zoom.forbidden;
  4073.     Zoom.mask.ondblclick = Zoom.onDblClick;
  4074.     var dy = Zoom.cvsZoomDom;
  4075.     Zoom.cvsZoom = dy;
  4076.     Zoom.mask.ontouchstart = Zoom.onZoom;
  4077.     Zoom.clientWidth = js.Lib.window.document.body.clientWidth;
  4078.     Zoom.clientHeight = js.Lib.window.document.body.clientHeight;
  4079.     RunTime.clientWidth = Zoom.clientWidth;
  4080.     RunTime.clientHeight = Zoom.clientHeight;
  4081.     var params = orc.utils.Util.getUrlParams();
  4082.     var _g1 = 0, _g = params.length;
  4083.     while(_g1 < _g) {
  4084.         var i = _g1++;
  4085.         var item = params[i];
  4086.         if(item.key == "img") Zoom.imgSrc = item.value; else if(item.key == "bookId") Zoom.bookId = item.value; else if(item.key == "page") Zoom.pageNum = item.value; else if(item.key == "pw") Zoom.pageWidth = Std.parseFloat(item.value); else if(item.key == "ph") Zoom.pageHeight = Std.parseFloat(item.value); else if(item.key == "bookTitle") {
  4087.             Zoom.bookTitle = item.value;
  4088.             Zoom.bookTitle = StringTools.urlDecode(Zoom.bookTitle);
  4089.         } else if(item.key == "bbv") Zoom.bbv = item.value; else if(item.key == "ua") Zoom.analyticsUA = item.value; else if(item.key == "pcode") Zoom.pcode = item.value;
  4090.     }
  4091.     js.Lib.document.title = Zoom.bookTitle + " - Page " + Std.string(Std.parseInt(Zoom.pageNum) + 1);
  4092.     Zoom.img = new core.Html5Image(Zoom.imgSrc,Zoom.onLoadImage);
  4093.     RunTime.useAnalyticsUA(Zoom.analyticsUA,Zoom.bookId);
  4094.     RunTime.logPageView(Std.parseInt(Zoom.pageNum) + 1);
  4095. }
  4096. Zoom.forbidden = function(e) {
  4097.     e.stopPropagation();
  4098. }
  4099. Zoom.onLoadImage = function() {
  4100.     var w = Zoom.img.image.width;
  4101.     var h = Zoom.img.image.height;
  4102.     Zoom.cvsZoom.width = Math.max(Zoom.pageWidth,Math.max(w,Zoom.clientWidth)) | 0;
  4103.     Zoom.cvsZoom.height = Math.max(Zoom.pageHeight,Math.max(h,Zoom.clientHeight)) | 0;
  4104.     Zoom.mask.style.width = Std.string(Zoom.cvsZoom.width) + "px";
  4105.     Zoom.mask.style.height = Std.string(Zoom.cvsZoom.height) + "px";
  4106.     Zoom.xOffset = 0.5 * (Zoom.cvsZoom.width - Math.max(Zoom.img.image.width,Zoom.pageWidth));
  4107.     Zoom.yOffset = 0.5 * (Zoom.cvsZoom.height - Math.max(Zoom.img.image.height,Zoom.pageHeight));
  4108.     Zoom.xScale = w / Zoom.pageWidth;
  4109.     Zoom.yScale = h / Zoom.pageHeight;
  4110.     Zoom.draw();
  4111.     RunTime.requestHotlinks(Zoom.loadHotlinks);
  4112.     RunTime.requestButtons(Zoom.loadButtons);
  4113.     RunTime.requestVideos(Zoom.loadVideos);
  4114. }
  4115. Zoom.draw = function() {
  4116.     var ctx = Zoom.getContext();
  4117.     var dp = Zoom.getDrawParams();
  4118.     ctx.drawImage(Zoom.img.image,dp.sx,dp.sy,dp.sw,dp.sh,dp.dx,dp.dy,dp.dw,dp.dh);
  4119. }
  4120. Zoom.getDrawParams = function() {
  4121.     var dp = new core.DrawParams();
  4122.     dp.sx = 0;
  4123.     dp.sy = 0;
  4124.     dp.sw = Zoom.img.image.width;
  4125.     dp.sh = Zoom.img.image.height;
  4126.     dp.dx = Zoom.xOffset;
  4127.     dp.dy = Zoom.yOffset;
  4128.     dp.dw = Math.max(Zoom.pageWidth,dp.sw);
  4129.     dp.dh = Math.max(Zoom.pageHeight,dp.sh);
  4130.     return dp;
  4131. }
  4132. Zoom.loadHotlinks = function() {
  4133.     var list = RunTime.book.hotlinks;
  4134.     var _g1 = 0, _g = list.length;
  4135.     while(_g1 < _g) {
  4136.         var i = _g1++;
  4137.         var item = list[i];
  4138.         if(Std.string(item.pageNum) == Zoom.pageNum) Zoom.hotlinks.push(item);
  4139.     }
  4140.     Zoom.renderHotlinks();
  4141. }
  4142. Zoom.loadVideos = function() {
  4143.     var list = RunTime.book.videos;
  4144.     var _g1 = 0, _g = list.length;
  4145.     while(_g1 < _g) {
  4146.         var i = _g1++;
  4147.         var item = list[i];
  4148.         if(Std.string(item.pageNum) == Zoom.pageNum) Zoom.videos.push(item);
  4149.     }
  4150.     Zoom.renderVideos();
  4151. }
  4152. Zoom.loadButtons = function() {
  4153.     var list = RunTime.book.buttons;
  4154.     var _g1 = 0, _g = list.length;
  4155.     while(_g1 < _g) {
  4156.         var i = _g1++;
  4157.         var item = list[i];
  4158.         if(Std.string(item.pageNum) == Zoom.pageNum) Zoom.buttons.push(item);
  4159.     }
  4160.     Zoom.renderButtons();
  4161. }
  4162. Zoom.renderHotlinks = function() {
  4163.     var list = Zoom.hotlinks;
  4164.     var ctx = Zoom.getContext();
  4165.     var _g1 = 0, _g = list.length;
  4166.     while(_g1 < _g) {
  4167.         var i = _g1++;
  4168.         var item = list[i];
  4169.         Zoom.renderHotlink(ctx,item);
  4170.     }
  4171. }
  4172. Zoom.renderHotlink = function(ctx,link) {
  4173.     link.loadToRect(ctx,Zoom.xOffset + link.x * Zoom.xScale,Zoom.yOffset + link.y * Zoom.yScale,link.width * Zoom.xScale,link.height * Zoom.yScale);
  4174. }
  4175. Zoom.renderVideos = function() {
  4176.     var dom = js.Lib.document.getElementById("cvsVideo");
  4177.     var _g1 = 0, _g = Zoom.videos.length;
  4178.     while(_g1 < _g) {
  4179.         var i = _g1++;
  4180.         var item = Zoom.videos[i];
  4181.         item.x = item.x * Zoom.xScale;
  4182.         if(item.youtubeId == null || item.youtubeId == "") dom.innerHTML += core.HtmlHelper.toRectVideoHtml(item,Zoom.xOffset + item.x * Zoom.xScale,Zoom.yOffset + item.y * Zoom.yScale,item.width * Zoom.xScale,item.height * Zoom.yScale); else dom.innerHTML += core.HtmlHelper.toRectYoutubeVideoHtml(item,Zoom.xOffset + item.x * Zoom.xScale,Zoom.yOffset + item.y * Zoom.yScale,item.width * Zoom.xScale,item.height * Zoom.yScale);
  4183.     }
  4184. }
  4185. Zoom.renderButtons = function() {
  4186.     var list = Zoom.buttons;
  4187.     var ctx = Zoom.getContext();
  4188.     var _g1 = 0, _g = list.length;
  4189.     while(_g1 < _g) {
  4190.         var i = _g1++;
  4191.         var item = list[i];
  4192.         item.loadToContext2DRect(ctx,Zoom.xOffset + item.x * Zoom.xScale,Zoom.yOffset + item.y * Zoom.yScale,item.width * Zoom.xScale,item.height * Zoom.yScale);
  4193.     }
  4194. }
  4195. Zoom.onDblClick = function(e) {
  4196.     Zoom.zoomOut();
  4197. }
  4198. Zoom.onZoom = function(e) {
  4199.     var date = new Date();
  4200.     if(Zoom.lastTouchTime != null) {
  4201.         var lastTime = Zoom.lastTouchTime.getTime();
  4202.         var newTime = date.getTime();
  4203.         if(newTime - lastTime < RunTime.doubleClickIntervalMs) {
  4204.             Zoom.lastTouchTime = null;
  4205.             Zoom.zoomOut();
  4206.             return;
  4207.         }
  4208.     }
  4209.     Zoom.lastTouchTime = date;
  4210.     var obj = e;
  4211.     var touch = obj.touches[0];
  4212.     if(obj.touches.length > 1) Zoom.zoomOut(); else Zoom.onClick(e);
  4213. }
  4214. Zoom.zoomOut = function(num) {
  4215.     if(num == null) num = -1;
  4216.     if(num == -1 || num == null) num = Std.parseInt(Zoom.pageNum);
  4217.     js.Lib.window.location.href = RunTime.urlIndex + "?page=" + Std.string(num) + "&bbv=" + Zoom.bbv + "&pcode=" + Zoom.pcode;
  4218. }
  4219. Zoom.onClick = function(e) {
  4220.     var match = null;
  4221.     var list = Zoom.hotlinks;
  4222.     var obj = e;
  4223.     var touch = obj.touches[0];
  4224.     var xx = touch.screenX;
  4225.     var yy = touch.screenY;
  4226.     Zoom.popupXOffset = xx - touch.clientX;
  4227.     Zoom.popupYOffset = yy - touch.clientY;
  4228.     var _g1 = 0, _g = list.length;
  4229.     while(_g1 < _g) {
  4230.         var i = _g1++;
  4231.         var link = list[i];
  4232.         if(xx >= Zoom.xOffset + link.x * Zoom.xScale && xx <= Zoom.xOffset + link.x * Zoom.xScale + link.width * Zoom.xScale && yy >= Zoom.yOffset + link.y * Zoom.yScale && yy <= Zoom.yOffset + link.y * Zoom.yScale + link.height * Zoom.yScale) {
  4233.             match = link;
  4234.             break;
  4235.         }
  4236.     }
  4237.     Zoom.invokeClickHotlink(match);
  4238.     var matchButton = null;
  4239.     var _g1 = 0, _g = Zoom.buttons.length;
  4240.     while(_g1 < _g) {
  4241.         var i = _g1++;
  4242.         var button = Zoom.buttons[i];
  4243.         if(xx >= Zoom.xOffset + button.x * Zoom.xScale && xx <= Zoom.xOffset + button.x * Zoom.xScale + button.width * Zoom.xScale && yy >= Zoom.yOffset + button.y * Zoom.yScale && yy <= Zoom.yOffset + button.y * Zoom.yScale + button.height * Zoom.yScale) {
  4244.             matchButton = button;
  4245.             break;
  4246.         }
  4247.     }
  4248.     Zoom.invokeClickButton(matchButton);
  4249. }
  4250. Zoom.invokeClickHotlink = function(link) {
  4251.     if(link == null) return;
  4252.     link.click(Zoom.popupXOffset,Zoom.popupYOffset);
  4253. }
  4254. Zoom.invokeClickButton = function(item) {
  4255.     if(item == null) return;
  4256.     item.click(Zoom.popupXOffset,Zoom.popupYOffset);
  4257. }
  4258. core.AudioInfo = function() {
  4259.     this.pageNum = -1;
  4260.     this.url = "";
  4261.     this.id = "";
  4262. };
  4263. core.AudioInfo.__name__ = true;
  4264. core.AudioInfo.prototype = {
  4265.     __class__: core.AudioInfo
  4266. }
  4267. core.BookContext = function() {
  4268.     this.pages = new Array();
  4269.     this.pageOffset = 0;
  4270.     this.scale = 1;
  4271.     this.offsetX = 0;
  4272.     this.offsetY = 0;
  4273. };
  4274. core.BookContext.__name__ = true;
  4275. core.BookContext.prototype = {
  4276.     getNoteAt: function(x,y) {
  4277.         if(this.notes == null) return null;
  4278.         var _g1 = 0, _g = this.notes.length;
  4279.         while(_g1 < _g) {
  4280.             var i = _g1++;
  4281.             var item = this.notes[i];
  4282.             if(item.hitTest(x,y) == true) return item;
  4283.         }
  4284.         return null;
  4285.     }
  4286.     ,getNotePosition: function() {
  4287.         return this.notes[0];
  4288.     }
  4289.     ,getHighLightAt: function(x,y) {
  4290.         if(this.highlights == null) return null;
  4291.         var _g1 = 0, _g = this.highlights.length;
  4292.         while(_g1 < _g) {
  4293.             var i = _g1++;
  4294.             var item = this.highlights[i];
  4295.             if(item.hitTest(x,y) == true) return item;
  4296.         }
  4297.         return null;
  4298.     }
  4299.     ,getButtonAt: function(x,y) {
  4300.         if(this.buttons == null) return null;
  4301.         var _g1 = 0, _g = this.buttons.length;
  4302.         while(_g1 < _g) {
  4303.             var i = _g1++;
  4304.             var item = this.buttons[i];
  4305.             if(item.hitTest(x,y) == true) return item;
  4306.         }
  4307.         return null;
  4308.     }
  4309.     ,getHotLinkAt: function(x,y) {
  4310.         if(this.hotlinks == null) return null;
  4311.         var _g1 = 0, _g = this.hotlinks.length;
  4312.         while(_g1 < _g) {
  4313.             var i = _g1++;
  4314.             var item = this.hotlinks[i];
  4315.             if(item.hitTest(x,y) == true) return item;
  4316.         }
  4317.         return null;
  4318.     }
  4319.     ,render: function() {
  4320.         this.clear();
  4321.         if(this.pages != null && this.ctx != null) {
  4322.             var _g1 = 0, _g = this.pages.length;
  4323.             while(_g1 < _g) {
  4324.                 var i = _g1++;
  4325.                 var item = this.pages[i];
  4326.                 item.scale = this.scale;
  4327.                 item.offsetX = this.offsetX;
  4328.                 item.offsetY = this.offsetY;
  4329.                 item.visible = true;
  4330.                 item.loadToContext2D(this.ctx);
  4331.             }
  4332.         }
  4333.         if(this.hotlinks != null && this.ctx != null) {
  4334.             var _g1 = 0, _g = this.hotlinks.length;
  4335.             while(_g1 < _g) {
  4336.                 var i = _g1++;
  4337.                 var item = this.hotlinks[i];
  4338.                 item.scale = this.scale;
  4339.                 item.offsetX = this.offsetX;
  4340.                 item.offsetY = this.offsetY;
  4341.                 item.loadToContext2D(this.ctxButton);
  4342.             }
  4343.         }
  4344.         if(this.buttons != null && this.ctxButton != null) {
  4345.             var _g1 = 0, _g = this.buttons.length;
  4346.             while(_g1 < _g) {
  4347.                 var i = _g1++;
  4348.                 var item = this.buttons[i];
  4349.                 item.scale = this.scale;
  4350.                 item.offsetX = this.offsetX;
  4351.                 item.offsetY = this.offsetY;
  4352.                 item.loadToContext2D(this.ctxButton);
  4353.             }
  4354.         }
  4355.         if(this.highlights != null && this.ctxHighLight != null) {
  4356.             var _g1 = 0, _g = this.highlights.length;
  4357.             while(_g1 < _g) {
  4358.                 var i = _g1++;
  4359.                 var item = this.highlights[i];
  4360.                 item.scale = this.scale;
  4361.                 item.offsetX = this.offsetX;
  4362.                 item.offsetY = this.offsetY;
  4363.                 item.loadToContext2D(this.ctxHighLight);
  4364.             }
  4365.         }
  4366.         if(this.notes != null && this.ctxNote != null) {
  4367.             var _g1 = 0, _g = this.notes.length;
  4368.             while(_g1 < _g) {
  4369.                 var i = _g1++;
  4370.                 var item = this.notes[i];
  4371.                 item.scale = this.scale;
  4372.                 item.offsetX = this.offsetX;
  4373.                 item.offsetY = this.offsetY;
  4374.                 item.loadToContext2D(this.ctxNote);
  4375.             }
  4376.         }
  4377.         if(this.bookmarks != null && this.bookmarks.length > 0) {
  4378.             var _g1 = 0, _g = this.bookmarks.length;
  4379.             while(_g1 < _g) {
  4380.                 var i = _g1++;
  4381.                 var item = this.bookmarks[i];
  4382.                 item.loadToContext2D(this.ctxBookmark);
  4383.             }
  4384.         }
  4385.     }
  4386.     ,addPage: function(page) {
  4387.         if(page == null) return;
  4388.         if(this.pages == null) this.pages = new Array();
  4389.         page.bookContext = this;
  4390.         this.pages.push(page);
  4391.     }
  4392.     ,clear: function(removePages) {
  4393.         if(removePages == null) removePages = false;
  4394.         if(this.pages != null) {
  4395.             var _g1 = 0, _g = this.pages.length;
  4396.             while(_g1 < _g) {
  4397.                 var i = _g1++;
  4398.                 var item = this.pages[i];
  4399.                 item.visible = false;
  4400.             }
  4401.         }
  4402.         if(removePages == true) this.pages = new Array();
  4403.         if(this.ctx != null) this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height);
  4404.         if(this.ctxButton != null) this.ctxButton.clearRect(0,0,this.ctxButton.canvas.width,this.ctxButton.canvas.height);
  4405.         if(this.ctxHighLight != null) this.ctxHighLight.clearRect(0,0,this.ctxHighLight.canvas.width,this.ctxHighLight.canvas.height);
  4406.         if(this.ctxNote != null) this.ctxNote.clearRect(0,0,this.ctxNote.canvas.width,this.ctxNote.canvas.height);
  4407.         if(this.ctxBookmark != null) this.ctxBookmark.clearRect(0,0,this.ctxBookmark.canvas.width,this.ctxBookmark.canvas.height);
  4408.     }
  4409.     ,removeAllPages: function() {
  4410.         if(this.pages != null) {
  4411.             var _g1 = 0, _g = this.pages.length;
  4412.             while(_g1 < _g) {
  4413.                 var i = _g1++;
  4414.                 var item = this.pages[i];
  4415.                 item.visible = false;
  4416.             }
  4417.         }
  4418.         this.pages = new Array();
  4419.     }
  4420.     ,resetLayoutParams: function() {
  4421.         this.offsetX = 0;
  4422.         this.offsetY = 0;
  4423.         this.scale = 1;
  4424.     }
  4425.     ,getPageCount: function() {
  4426.         return this.pages.length;
  4427.     }
  4428.     ,__class__: core.BookContext
  4429. }
  4430. core.Bookmark = function() {
  4431.     this.onlyread = false;
  4432.     var _g = this;
  4433.     this.bookmarkImg = js.Lib.document.createElement("img");
  4434.     this.bookmarkImg.onload = function() {
  4435.         _g.bookImgLoaded = true;
  4436.     };
  4437.     this.bookmarkImg.src = RunTime.urlRoot + "content/images/bookmark.png";
  4438. };
  4439. core.Bookmark.__name__ = true;
  4440. core.Bookmark.prototype = {
  4441.     loadToContext2D: function(ctx) {
  4442.         if(ctx != null && this.bookImgLoaded) {
  4443.             ctx.save();
  4444.             ctx.drawImage(this.bookmarkImg,(RunTime.clientWidth | 0) - 40,52);
  4445.             ctx.restore();
  4446.         }
  4447.     }
  4448.     ,clone: function() {
  4449.         var bookmark = new core.Bookmark();
  4450.         bookmark.guid = this.guid;
  4451.         bookmark.pageNum = this.pageNum;
  4452.         bookmark.text = this.text;
  4453.         return bookmark;
  4454.     }
  4455.     ,remove: function() {
  4456.         localStorage.removeItem(this.guid);
  4457.     }
  4458.     ,fillData: function(guid,json) {
  4459.         var objJSON = JSON.parse(json);
  4460.         this.pageNum = Std.parseInt(objJSON.obj[0].pageNum);
  4461.         this.text = objJSON.obj[0].text;
  4462.         this.guid = guid;
  4463.     }
  4464.     ,save: function() {
  4465.         this.guid = RunTime.kvPrex + "@$bm$@" + new Date().getTime();
  4466.         localStorage.setItem(this.guid,this.toJSONString());
  4467.     }
  4468.     ,toJSONString: function() {
  4469.         var json = "{\"obj\":[{\"pageNum\":\"" + this.pageNum + "\",\"text\":\"" + this.text + "\"}]}";
  4470.         return json;
  4471.     }
  4472.     ,__class__: core.Bookmark
  4473. }
  4474. core.ButtonInfo = function() {
  4475.     this.target = "_blank";
  4476.     this.window_color = "#333333";
  4477.     this.fontSize = "12";
  4478.     this.fontColor = "#ffffff";
  4479.     this.text = "";
  4480.     this.layer = "onpage";
  4481.     this.pageLayoutType = 0;
  4482.     this.scale = 1;
  4483.     this.offsetX = 0;
  4484.     this.offsetY = 0;
  4485. };
  4486. core.ButtonInfo.__name__ = true;
  4487. core.ButtonInfo.prototype = {
  4488.     click: function(popupXOffset,popupYOffset) {
  4489.         if(popupYOffset == null) popupYOffset = 0;
  4490.         if(popupXOffset == null) popupXOffset = 0;
  4491.         switch(this.type) {
  4492.         case "":
  4493.             if(this.destination != null) {
  4494.                 if(this.destination.indexOf("page:") == 0) {
  4495.                     var val = HxOverrides.substr(this.destination,5,null);
  4496.                     var num = Std.parseInt(val);
  4497.                     if(RunTime.flipBook != null) RunTime.flipBook.turnToPage(num - 1); else Zoom.zoomOut(num - 1);
  4498.                 } else if(this.destination.indexOf("mailto:") == 0) {
  4499.                     RunTime.logClickLink(this.destination);
  4500.                     js.Lib.window.location.href = this.destination;
  4501.                 } else if(this.destination.indexOf("fun:") == 0) {
  4502.                     var fun = HxOverrides.substr(this.destination,4,null);
  4503.                     if(fun == "content") RunTime.flipBook.onContentsClick(null); else if(fun == "thumb") RunTime.flipBook.onThumbsClick(null); else if(fun == "showtxt") RunTime.flipBook.onShowTxtClick(null); else if(fun == "highlight") RunTime.flipBook.onButtonMaskClick(null); else if(fun == "bookmark") RunTime.flipBook.onButtonBookmark(null); else if(fun == "notes") RunTime.flipBook.onButtonNoteClick(null); else if(fun == "autoflip") RunTime.flipBook.onAutoFlipClick(null); else if(fun == "download") RunTime.onDownloadClick(null); else if(fun == "fliptofront") RunTime.flipBook.turnToFirstPage(null); else if(fun == "flipleft") RunTime.flipBook.turnToPrevPage(null); else if(fun == "flipright") RunTime.flipBook.turnToNextPage(null); else if(fun == "fliptoback") RunTime.flipBook.turnToLastPage(null);
  4504.                 } else {
  4505.                     RunTime.logClickLink(this.destination);
  4506.                     if("_self" == this.target) js.Lib.window.location.href = this.destination; else js.Lib.window.open(this.destination,this.target);
  4507.                 }
  4508.             }
  4509.             break;
  4510.         case "image":
  4511.             RunTime.showPopupMaskLayer();
  4512.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4513.             core.HtmlHelper.toPopupImageHtml(this,function(txt) {
  4514.                 js.Lib.document.getElementById("cvsOthers").innerHTML = txt;
  4515.                 js.Lib.document.getElementById("popupImage").style.cssText += " -moz-transform: scale(1);-moz-transition:width  2s ease-out;-webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4516.             });
  4517.             RunTime.logClickLink(this.destination);
  4518.             break;
  4519.         case "video":
  4520.             RunTime.showPopupMaskLayer();
  4521.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4522.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupVideoHtml(this);
  4523.             js.Lib.document.getElementById("popupVideo").style.cssText += " -moz-transform: scale(1);-moz-transition:width  2s ease-out; -webkit-transform: scale(1);-webkit-transition: 0.5s ease-out; ";
  4524.             RunTime.playVideo();
  4525.             RunTime.logVideoView(this.destination,this.youtubeId);
  4526.             break;
  4527.         case "audio":
  4528.             RunTime.flipBook.showPopupAudio(this);
  4529.             RunTime.logAudioView(this.destination);
  4530.             RunTime.playAudio();
  4531.             break;
  4532.         case "message":
  4533.             RunTime.showPopupMaskLayer();
  4534.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4535.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4536.             js.Lib.document.getElementById("popupMessage").style.cssText += " -moz-transform: scale(1);-moz-transition:width  2s ease-out; -webkit-transform: scale(1);-webkit-transition: 0.5s ease-out; ";
  4537.             break;
  4538.         case "message-hover":
  4539.             RunTime.showPopupMaskLayer();
  4540.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4541.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4542.             js.Lib.document.getElementById("popupMessage").style.cssText += "-moz-transform: scale(1); -moz-transition:width 2s ease-out; -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4543.             break;
  4544.         }
  4545.     }
  4546.     ,hitTest: function(mouseX,mouseY) {
  4547.         if(this.type == "none") return false;
  4548.         var dp = this.getDrawParams();
  4549.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4550.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4551.         var ww = this.width * (dp.dw / dp.sw);
  4552.         var hh = this.height * (dp.dh / dp.sh);
  4553.         haxe.Log.trace("mouseX=" + mouseX + ",mouseY=" + mouseY,{ fileName : "ButtonInfo.hx", lineNumber : 153, className : "core.ButtonInfo", methodName : "hitTest"});
  4554.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  4555.         return result;
  4556.     }
  4557.     ,loadToRect: function(ctx,x,y,w,h) {
  4558.         if(w > 0 && h > 0) {
  4559.             if(this.text == "") ctx.drawImage(this._imagePage,0,0,this._imagePage.width,this._imagePage.height,x,y,w,h); else {
  4560.                 ctx.save();
  4561.                 ctx.fillStyle = this.fontColor;
  4562.                 ctx.font = this.fontSize + "px " + "san-serif";
  4563.                 ctx.fillText(this.text,x,y + 30);
  4564.                 ctx.restore();
  4565.             }
  4566.         }
  4567.     }
  4568.     ,loadToContext2DRect: function(ctx,x,y,w,h) {
  4569.         this.ctx = ctx;
  4570.         if(this._imagePage == null) {
  4571.             var self = this;
  4572.             this.getImagePage(function() {
  4573.                 self.loaded = true;
  4574.                 self.loadToContext2DRect(self.ctx,self.x,self.y,self.width,self.height);
  4575.             });
  4576.         }
  4577.         if(this.loaded == true) this.loadToRect(ctx,x,y,this.width,this.height);
  4578.     }
  4579.     ,loadToContext2D: function(ctx) {
  4580.         this.ctx = ctx;
  4581.         if(this._imagePage == null) {
  4582.             var self = this;
  4583.             this.getImagePage(function() {
  4584.                 self.loaded = true;
  4585.                 self.loadToContext2D(self.ctx);
  4586.             });
  4587.         }
  4588.         if(this.loaded == true) {
  4589.             var dp = this.getDrawParams();
  4590.             var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4591.             var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4592.             var ww = this.width * (dp.dw / dp.sw);
  4593.             var hh = this.height * (dp.dh / dp.sh);
  4594.             this.loadToRect(ctx,xx,yy,ww,hh);
  4595.         }
  4596.     }
  4597.     ,getImagePage: function(onloadFunc) {
  4598.         if(this._imagePage != null) return this._imagePage;
  4599.         var img = new Image();
  4600.         img.src = this.image;
  4601.         img.onload = onloadFunc;
  4602.         this._imagePage = img;
  4603.         return this._imagePage;
  4604.     }
  4605.     ,getDrawParams: function() {
  4606.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  4607.         if(this.pageLayoutType == 2) dp = RunTime.getGolobaDrawParams();
  4608.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4609.         return dp;
  4610.     }
  4611.     ,__class__: core.ButtonInfo
  4612. }
  4613. core.DrawParams = function() {
  4614. };
  4615. core.DrawParams.__name__ = true;
  4616. core.DrawParams.prototype = {
  4617.     sliceRight: function(ratio,xOffset) {
  4618.         if(xOffset == null) xOffset = 0;
  4619.         if(ratio < 0) ratio = 0; else if(ratio > 1) ratio = 1;
  4620.         var dp = new core.DrawParams();
  4621.         dp.sx = this.sx + this.sw * (1 - ratio);
  4622.         dp.sy = this.sy;
  4623.         dp.dx = this.dx + this.dw * (1 - ratio) + xOffset;
  4624.         dp.dy = this.dy;
  4625.         dp.sw = this.sw * ratio;
  4626.         dp.sh = this.sh;
  4627.         dp.dw = this.dw * ratio;
  4628.         dp.dh = this.dh;
  4629.         return dp;
  4630.     }
  4631.     ,sliceLeft: function(ratio,xOffset) {
  4632.         if(xOffset == null) xOffset = 0;
  4633.         if(ratio < 0) ratio = 0; else if(ratio > 1) ratio = 1;
  4634.         var dp = new core.DrawParams();
  4635.         dp.sx = this.sx;
  4636.         dp.sy = this.sy;
  4637.         dp.dx = this.dx + xOffset;
  4638.         dp.dy = this.dy;
  4639.         dp.sw = this.sw * ratio;
  4640.         dp.sh = this.sh;
  4641.         dp.dw = this.dw * ratio;
  4642.         dp.dh = this.dh;
  4643.         haxe.Log.trace("x: " + dp.dw + " y:" + dp.dh,{ fileName : "DrawParams.hx", lineNumber : 127, className : "core.DrawParams", methodName : "sliceLeft"});
  4644.         return dp;
  4645.     }
  4646.     ,toString2: function() {
  4647.         return "x: " + Std.string(this.sx | 0) + ", y:" + Std.string(this.sy | 0) + ", w:" + Std.string(this.sw | 0) + ", h:" + Std.string(this.sh | 0) + ", x2:" + Std.string(this.dx | 0) + ", y2:" + Std.string(this.dy | 0) + ", w2:" + Std.string(this.dw | 0) + ", h2:" + Std.string(this.dh | 0);
  4648.     }
  4649.     ,toString: function() {
  4650.         return Std.string(this.sx) + "," + Std.string(this.sy) + "," + Std.string(this.sw) + "," + Std.string(this.sh) + "," + Std.string(this.dx) + "," + Std.string(this.dy) + "," + Std.string(this.dw) + "," + Std.string(this.dh);
  4651.     }
  4652.     ,applyTransform: function(scale,offsetX,offsetY) {
  4653.         this.dx = this.dx * scale + offsetX;
  4654.         this.dy = this.dy * scale + offsetY;
  4655.         this.dw = this.dw * scale;
  4656.         this.dh = this.dh * scale;
  4657.     }
  4658.     ,clone: function() {
  4659.         var dw = new core.DrawParams();
  4660.         dw.sx = this.sx;
  4661.         dw.sy = this.sy;
  4662.         dw.sw = this.sw;
  4663.         dw.sh = this.sh;
  4664.         dw.dx = this.dx;
  4665.         dw.dy = this.dy;
  4666.         dw.dw = this.dw;
  4667.         dw.dh = this.dh;
  4668.         return dw;
  4669.     }
  4670.     ,scaleY: function() {
  4671.         return this.dh / this.sh;
  4672.     }
  4673.     ,scaleX: function() {
  4674.         return this.dw / this.sw;
  4675.     }
  4676.     ,dhi: function() {
  4677.         return Math.round(this.dh);
  4678.     }
  4679.     ,dwi: function() {
  4680.         return Math.round(this.dw);
  4681.     }
  4682.     ,dyi: function() {
  4683.         return Math.round(this.dy);
  4684.     }
  4685.     ,dxi: function() {
  4686.         return Math.round(this.dx);
  4687.     }
  4688.     ,__class__: core.DrawParams
  4689. }
  4690. core.HighLight = function() {
  4691.     this.note = new core.Note();
  4692.     this.x = 0;
  4693.     this.y = 0;
  4694.     this.width = 0;
  4695.     this.height = 0;
  4696.     this.pageNum = -1;
  4697.     this.guid = "";
  4698.     this.color = "";
  4699.     this.checked = false;
  4700.     this.pageLayoutType = 0;
  4701.     this.scale = 1;
  4702.     this.offsetX = 0;
  4703.     this.offsetY = 0;
  4704. };
  4705. core.HighLight.__name__ = true;
  4706. core.HighLight.prototype = {
  4707.     click: function(popupXOffset,popupYOffset) {
  4708.         if(popupYOffset == null) popupYOffset = 0;
  4709.         if(popupXOffset == null) popupXOffset = 0;
  4710.         RunTime.showPopupMaskLayer();
  4711.         RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4712.         js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toHighLightPopupHtml(this,"saveHighlightNote","deleteHighlightNote");
  4713.         js.Lib.document.getElementById("textNote").focus();
  4714.     }
  4715.     ,hitTest: function(mouseX,mouseY) {
  4716.         var dp = this.getDrawParams();
  4717.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4718.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4719.         var ww = this.width * (dp.dw / dp.sw);
  4720.         var hh = this.height * (dp.dh / dp.sh);
  4721.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  4722.         return result;
  4723.     }
  4724.     ,draw: function(context) {
  4725.         var radius = 5;
  4726.         context.save();
  4727.         this.color = "rgba(255,0,0,0.4)";
  4728.         context.fillStyle = this.color;
  4729.         context.fillRect(this.tx | 0,this.ty | 0,this.twidth | 0,this.theight | 0);
  4730.         context.restore();
  4731.         if(this.note != null) {
  4732.             this.note.x = this.tx;
  4733.             this.note.y = this.ty - this.note.image.height;
  4734.             this.note.draw();
  4735.         }
  4736.     }
  4737.     ,loadToContext2D: function(context) {
  4738.         var radius = 5;
  4739.         context.save();
  4740.         if(this.color != "") context.fillStyle = this.color; else context.fillStyle = "rgba(0,255,0,0.4)";
  4741.         var dp = this.getDrawParams();
  4742.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4743.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4744.         var ww = this.width * (dp.dw / dp.sw);
  4745.         var hh = this.height * (dp.dh / dp.sh);
  4746.         context.fillRect(xx | 0,yy | 0,ww | 0,hh | 0);
  4747.         context.restore();
  4748.         if(this.note != null) {
  4749.             this.note.x = this.x;
  4750.             this.note.y = this.y - this.note.image.height;
  4751.             this.note.draw();
  4752.         }
  4753.     }
  4754.     ,remove: function() {
  4755.         localStorage.removeItem(this.guid);
  4756.     }
  4757.     ,updateText: function(text,color) {
  4758.         this.note.text = text;
  4759.         this.color = "rgba(" + color + ",0.4)";
  4760.         localStorage.setItem(this.guid,this.toJSONString());
  4761.     }
  4762.     ,setChecked: function(bChecked) {
  4763.         this.checked = bChecked;
  4764.         if(this.checked) {
  4765.         } else {
  4766.         }
  4767.     }
  4768.     ,fillData: function(guid,json) {
  4769.         var objJSON = JSON.parse(json);
  4770.         this.x = Std.parseFloat(objJSON.obj[0].x);
  4771.         this.y = Std.parseFloat(objJSON.obj[0].y);
  4772.         this.width = Std.parseFloat(objJSON.obj[0].width);
  4773.         this.height = Std.parseFloat(objJSON.obj[0].height);
  4774.         this.note.text = objJSON.obj[0].note;
  4775.         this.pageNum = Std.parseInt(objJSON.obj[0].page);
  4776.         this.color = Std.string(objJSON.obj[0].color);
  4777.         this.guid = guid;
  4778.     }
  4779.     ,DataTransform: function() {
  4780.         var dp = this.getDrawParams();
  4781.         this.pageNum = this.tpageNum;
  4782.         if(RunTime.singlePage) {
  4783.         } else if(RunTime.book.rightToLeft) {
  4784.             if(this.tx > RunTime.clientWidth / 2) dp = this.getLeftDrawParams(); else dp = this.getRightDrawParams();
  4785.         } else if(this.tx > RunTime.clientWidth / 2) dp = this.getRightDrawParams(); else dp = this.getLeftDrawParams();
  4786.         this.x = dp.sx + (this.tx - dp.dx) / (dp.dw / dp.sw);
  4787.         this.y = dp.sy + (this.ty - dp.dy) / (dp.dh / dp.sh);
  4788.         this.width = this.twidth / (dp.dw / dp.sw);
  4789.         this.height = this.theight / (dp.dh / dp.sh);
  4790.         haxe.Log.trace("x=" + this.x + ",y=" + this.y + ",width=" + this.width + ",height=" + this.height,{ fileName : "HighLight.hx", lineNumber : 208, className : "core.HighLight", methodName : "DataTransform"});
  4791.     }
  4792.     ,save: function() {
  4793.         if(this.twidth == 0 || this.theight == 0) return;
  4794.         this.guid = RunTime.kvPrex + "@$ht$@" + new Date().getTime();
  4795.         this.DataTransform();
  4796.         localStorage.setItem(this.guid,this.toJSONString());
  4797.     }
  4798.     ,toJSONString: function() {
  4799.         var json = "{\"obj\":[{\"x\":\"" + this.x + "\",\"y\":\"" + this.y + "\",\"width\":\"" + this.width + "\",\"height\":\"" + this.height + "\",\"page\":\"" + this.pageNum + "\",\"color\":\"" + this.color + "\",\"note\":\"" + this.note.text + "\"}]}";
  4800.         return json;
  4801.     }
  4802.     ,getBottom: function() {
  4803.         return this.y + this.height;
  4804.     }
  4805.     ,getTop: function() {
  4806.         return this.y;
  4807.     }
  4808.     ,getRight: function() {
  4809.         return this.x + this.width;
  4810.     }
  4811.     ,getLeft: function() {
  4812.         return this.x;
  4813.     }
  4814.     ,getContext: function() {
  4815.         return this.canvas.getContext("2d");
  4816.     }
  4817.     ,setCanvas: function(canvas) {
  4818.         this.canvas = canvas;
  4819.         if(this.note != null) this.note.setCanvas(this.canvas);
  4820.     }
  4821.     ,clone: function() {
  4822.         this.DataTransform();
  4823.         var hl = new core.HighLight();
  4824.         hl.x = this.x;
  4825.         hl.y = this.y;
  4826.         hl.width = this.width;
  4827.         hl.height = this.height;
  4828.         hl.pageNum = this.pageNum;
  4829.         hl.guid = this.guid;
  4830.         hl.color = this.color;
  4831.         hl.note.text = this.note.text;
  4832.         return hl;
  4833.     }
  4834.     ,getRightDrawParams: function() {
  4835.         var dp = RunTime.getDrawParams(1);
  4836.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4837.         return dp;
  4838.     }
  4839.     ,getLeftDrawParams: function() {
  4840.         var dp = RunTime.getDrawParams(-1);
  4841.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4842.         return dp;
  4843.     }
  4844.     ,getDrawParams: function() {
  4845.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  4846.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4847.         return dp;
  4848.     }
  4849.     ,__class__: core.HighLight
  4850. }
  4851. core.HotLink = function() {
  4852.     this.target = "_blank";
  4853.     this.window_color = "#333333";
  4854.     this.opacity = 0.8;
  4855.     this.pageLayoutType = 0;
  4856.     this.color = "#333333";
  4857.     this.scale = 1;
  4858.     this.offsetX = 0;
  4859.     this.offsetY = 0;
  4860. };
  4861. core.HotLink.__name__ = true;
  4862. core.HotLink.prototype = {
  4863.     click: function(popupXOffset,popupYOffset) {
  4864.         if(popupYOffset == null) popupYOffset = 0;
  4865.         if(popupXOffset == null) popupXOffset = 0;
  4866.         switch(this.type) {
  4867.         case "":
  4868.             if(this.destination != null) {
  4869.                 if(this.destination.indexOf("page:") == 0) {
  4870.                     var val = HxOverrides.substr(this.destination,5,null);
  4871.                     var num = Std.parseInt(val);
  4872.                     if(RunTime.flipBook != null) RunTime.flipBook.turnToPage(num - 1); else Zoom.zoomOut(num - 1);
  4873.                 } else if(this.destination.indexOf("mailto:") == 0) {
  4874.                     RunTime.logClickLink(this.destination);
  4875.                     js.Lib.window.location.href = this.destination;
  4876.                 } else if(this.destination.indexOf("fun:") == 0) {
  4877.                     var fun = HxOverrides.substr(this.destination,4,null);
  4878.                     if(fun == "content") RunTime.flipBook.onContentsClick(null); else if(fun == "thumb") RunTime.flipBook.onThumbsClick(null); else if(fun == "showtxt") RunTime.flipBook.onShowTxtClick(null); else if(fun == "highlight") RunTime.flipBook.onButtonMaskClick(null); else if(fun == "bookmark") RunTime.flipBook.onButtonBookmark(null); else if(fun == "notes") RunTime.flipBook.onButtonNoteClick(null); else if(fun == "autoflip") RunTime.flipBook.onAutoFlipClick(null); else if(fun == "download") RunTime.onDownloadClick(null); else if(fun == "fliptofront") RunTime.flipBook.turnToFirstPage(null); else if(fun == "flipleft") RunTime.flipBook.turnToPrevPage(null); else if(fun == "flipright") RunTime.flipBook.turnToNextPage(null); else if(fun == "fliptoback") RunTime.flipBook.turnToLastPage(null);
  4879.                 } else {
  4880.                     RunTime.logClickLink(this.destination);
  4881.                     if("_self" == this.target) js.Lib.window.location.href = this.destination; else js.Lib.window.open(this.destination,this.target);
  4882.                 }
  4883.             }
  4884.             break;
  4885.         case "image":
  4886.             RunTime.showPopupMaskLayer();
  4887.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4888.             core.HtmlHelper.toPopupImageHtml(this,function(txt) {
  4889.                 js.Lib.document.getElementById("cvsOthers").innerHTML = txt;
  4890.                 js.Lib.document.getElementById("popupImage").style.cssText += "-moz-transform: scale(1);-moz-transition: width 0.5s ease-out;  -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4891.             });
  4892.             RunTime.logClickLink(this.destination);
  4893.             break;
  4894.         case "video":
  4895.             RunTime.showPopupMaskLayer();
  4896.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4897.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupVideoHtml(this);
  4898.             js.Lib.document.getElementById("popupVideo").style.cssText += "-moz-transform: scale(1);-moz-transition: width 0.5s ease-out; -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4899.             RunTime.playVideo();
  4900.             RunTime.logVideoView(this.destination,this.youtubeId);
  4901.             break;
  4902.         case "audio":
  4903.             RunTime.flipBook.showPopupAudio(this);
  4904.             RunTime.logAudioView(this.destination);
  4905.             RunTime.playAudio();
  4906.             break;
  4907.         case "message":
  4908.             RunTime.showPopupMaskLayer();
  4909.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4910.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4911.             js.Lib.document.getElementById("popupMessage").style.cssText += " -moz-transform: scale(1);-moz-transition: width 0.5s ease-out; -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4912.             break;
  4913.         case "message-hover":
  4914.             RunTime.showPopupMaskLayer();
  4915.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4916.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4917.             js.Lib.document.getElementById("popupMessage").style.cssText += " -moz-transform: scale(1);-moz-transition:width  0.5s ease-out; -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4918.             break;
  4919.         }
  4920.     }
  4921.     ,hitTest: function(mouseX,mouseY) {
  4922.         var dp = this.getDrawParams();
  4923.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4924.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4925.         var ww = this.width * (dp.dw / dp.sw);
  4926.         var hh = this.height * (dp.dh / dp.sh);
  4927.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  4928.         return result;
  4929.     }
  4930.     ,loadToContext2D: function(ctx) {
  4931.         var dp = this.getDrawParams();
  4932.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4933.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4934.         var ww = this.width * (dp.dw / dp.sw);
  4935.         var hh = this.height * (dp.dh / dp.sh);
  4936.         this.loadToRect(ctx,xx,yy,ww,hh);
  4937.     }
  4938.     ,loadToRect: function(ctx,x,y,w,h) {
  4939.         if(w > 0 && h > 0) {
  4940.             ctx.fillStyle = orc.utils.DrawHelper.createFillStyle(this.color,this.opacity);
  4941.             ctx.fillRect(x | 0,y | 0,w | 0,h | 0);
  4942.         }
  4943.     }
  4944.     ,getDrawParams: function() {
  4945.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  4946.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4947.         return dp;
  4948.     }
  4949.     ,__class__: core.HotLink
  4950. }
  4951. core.Html5Image = function(url,onLoad) {
  4952.     this.url = url;
  4953.     this.onload = onLoad;
  4954.     this.image = new Image();
  4955.     this.image.onload = this.onload;
  4956.     this.image.src = url;
  4957. };
  4958. core.Html5Image.__name__ = true;
  4959. core.Html5Image.prototype = {
  4960.     __class__: core.Html5Image
  4961. }
  4962. core.HtmlHelper = function() { }
  4963. core.HtmlHelper.__name__ = true;
  4964. core.HtmlHelper.toContentsHtml = function(xml) {
  4965.     var roots = orc.utils.Util.getXmlChilds(xml);
  4966.     if(roots.length != 1) return "";
  4967.     var root = roots[0];
  4968.     var childs = orc.utils.Util.getXmlChilds(root);
  4969.     var s = "";
  4970.     if(childs.length > 0) {
  4971.         var _g1 = 0, _g = childs.length;
  4972.         while(_g1 < _g) {
  4973.             var i = _g1++;
  4974.             s += core.HtmlHelper.toContentsNodeHtml(childs[i],0);
  4975.         }
  4976.     }
  4977.     return s;
  4978. }
  4979. core.HtmlHelper.toContentsNodeHtml = function(xml,index) {
  4980.     var childs = orc.utils.Util.getXmlChilds(xml);
  4981.     var s = "";
  4982.     s += "<ul>";
  4983.     s += "<li>";
  4984.     s += core.HtmlHelper.toContentsNodeHtmlCore(xml,index);
  4985.     s += "</li>";
  4986.     if(childs.length > 0) {
  4987.         core.HtmlHelper.lv++;
  4988.         s += "<ul>";
  4989.         var _g1 = 0, _g = childs.length;
  4990.         while(_g1 < _g) {
  4991.             var i = _g1++;
  4992.             s += core.HtmlHelper.toContentsNodeHtml(childs[i],core.HtmlHelper.lv);
  4993.         }
  4994.         s += "</ul>";
  4995.     }
  4996.     s += "</ul>";
  4997.     return s;
  4998. }
  4999. core.HtmlHelper.toContentsNodeHtmlCore = function(xml,index) {
  5000.     var title = xml.get("title");
  5001.     var page = xml.get("page");
  5002.     var pageVal = 0;
  5003.     if(page != null && page != "") {
  5004.         pageVal = Std.parseInt(page);
  5005.         page = Std.string(pageVal - 1);
  5006.     }
  5007.     var t = "";
  5008.     if(index == 0) {
  5009.         t = "";
  5010.         core.HtmlHelper.lv = 0;
  5011.     } else {
  5012.         var _g = 0;
  5013.         while(_g < index) {
  5014.             var i = _g++;
  5015.             t += "  ";
  5016.         }
  5017.     }
  5018.     return "<span onclick=\"gotoPage(" + page + ");\">" + t + title + "</span>";
  5019. }
  5020. core.HtmlHelper.toSnsHtml = function(xml) {
  5021.     var roots = orc.utils.Util.getXmlChilds(xml);
  5022.     if(roots.length != 1) return "";
  5023.     var root = roots[0];
  5024.     var childs = orc.utils.Util.getXmlChilds(root);
  5025.     var s = "";
  5026.     s += "<div id='snsbox' style='float:left;width: 100%;height: 250px;'>";
  5027.     if(childs.length > 0) {
  5028.         var _g1 = 0, _g = childs.length;
  5029.         while(_g1 < _g) {
  5030.             var i = _g1++;
  5031.             s += core.HtmlHelper.toSnsNodeHtml(childs[i]);
  5032.         }
  5033.     }
  5034.     s += "</div>";
  5035.     return s;
  5036. }
  5037. core.HtmlHelper.toSnsNodeHtml = function(xml) {
  5038.     var s = "<p style='float:left;width:150px;height:35px;'>";
  5039.     s += "<a href='" + xml.get("href") + "'><img style='vertical-align:middle;' src='" + xml.get("logoUrl") + "'>" + "</a> ";
  5040.     s += "<span onclick=\"RunTime.navigateUrl('" + xml.get("href") + "')\" style='vertical-align:middle;'>" + xml.get("name") + "</span>";
  5041.     s += "</p>";
  5042.     return s;
  5043. }
  5044. core.HtmlHelper.toAboutHtml = function(aboutXml,bookinfoXml) {
  5045.     var aboutRoots = orc.utils.Util.getXmlChilds(aboutXml);
  5046.     if(aboutRoots.length != 1) return "";
  5047.     var aboutRoot = aboutRoots[0];
  5048.     var bookinfoRoots = orc.utils.Util.getXmlChilds(bookinfoXml);
  5049.     if(bookinfoRoots.length != 1) return "";
  5050.     var bookinfoRoot = bookinfoRoots[0];
  5051.     var logoUrl = aboutRoot.get("logo");
  5052.     var text = aboutRoot.firstChild().getNodeValue();
  5053.     var bookTitle = bookinfoRoot.get("title");
  5054.     var bookAuthor = bookinfoRoot.get("author");
  5055.     var companyName = bookinfoRoot.get("companyName");
  5056.     var companyUrl = bookinfoRoot.get("companyUrl");
  5057.     var companyAddress = bookinfoRoot.get("companyAddress");
  5058.     var companyEmail = bookinfoRoot.get("email");
  5059.     var companyTel = bookinfoRoot.get("tel");
  5060.     var l_bookTitle = L.s("BookTitle","Book Title");
  5061.     var l_bookAuthor = L.s("BookAuthor","Book Author");
  5062.     var l_companyName = L.s("CompanyName","Company Name");
  5063.     var l_companyUrl = L.s("CompanyUrl","Company Url");
  5064.     var l_companyAddress = L.s("CompanyAddress","Address");
  5065.     var l_companyEmail = L.s("CompanyEmail","Email");
  5066.     var l_companyTel = L.s("CompanyTel","Tel");
  5067.     var aboutUsText = "";
  5068.     if(bookTitle != "") aboutUsText += l_bookTitle + ":" + bookTitle + "<br />";
  5069.     if(bookAuthor != "") aboutUsText += l_bookAuthor + ":" + bookAuthor + "<br />";
  5070.     if(companyName != "") aboutUsText += l_companyName + ":" + companyName + "<br />";
  5071.     if(companyUrl != "") aboutUsText += l_companyUrl + ":" + companyUrl + "<br />";
  5072.     if(companyAddress != "") aboutUsText += l_companyAddress + ":" + companyAddress + "<br />";
  5073.     if(companyEmail != "") aboutUsText += l_companyEmail + ":" + companyEmail + "<br />";
  5074.     if(companyTel != "") aboutUsText += l_companyTel + ":" + companyTel + "<br />";
  5075.     var s = "";
  5076.     s += "<div style='width:100%; height:280px;'>";
  5077.     s += "<div style='width:30%; height:160px; float:left;'>";
  5078.     if(logoUrl != "") s += "<img src='" + logoUrl + "'/>";
  5079.     s += "</div>";
  5080.     s += "<div style='width:65%; height:160px; float:left;'>" + aboutUsText + "</a></div>";
  5081.     s += "<div style='width:100%; height:110px;'>" + text + "</div>";
  5082.     s += "</div>";
  5083.     return s;
  5084. }
  5085. core.HtmlHelper.toEmailHtml = function() {
  5086.     var s = "";
  5087.     s += "<form  id='sendEmail' action='" + RunTime.book.gateway + "' method='post'>";
  5088.     s += "<table border='none' class='email'>";
  5089.     s += "<tr><td>" + L.s("To","To") + ":</td><td><input  id='tomail' type='text' name='tomail' /></td></tr>";
  5090.     s += "<tr><td>" + L.s("YourName","Your Name") + ":</td><td><input id='yname' type='text' name='yourName'/></td></tr>";
  5091.     s += "<tr><td>" + L.s("YourEmail","Your Email") + ":</td><td><input id='youremail' type='text' name='frommail'/></td></tr>";
  5092.     s += "<tr><td>" + L.s("Message","Message") + ":</td><td><textarea rows='7' cols='30' id='sharemsg' name='message'></textarea></td></tr>";
  5093.     s += "<tr><td></td><td align='right'><input style='width:100px' type='button' onclick='RunTime.onSendEmail();' value='" + L.s("Send","Send") + "'/></td></tr>";
  5094.     s += "</table>";
  5095.     s += "<input style='display:none' type='hide' id='subject' name='subject' value='" + L.s("YourFriend","YourFirend") + L.s("ShareEmailTitle","ShareEmailTitle") + "'/>";
  5096.     s += "</form>";
  5097.     return s;
  5098. }
  5099. core.HtmlHelper.toThumbsHtml = function(pages) {
  5100.     var s = "";
  5101.     var _g1 = 0, _g = pages.length;
  5102.     while(_g1 < _g) {
  5103.         var i = _g1++;
  5104.         var page = pages[i];
  5105.         s += core.HtmlHelper.toThumbsNodeHtml(page);
  5106.     }
  5107.     return s;
  5108. }
  5109. core.HtmlHelper.toThumbsNodeHtml = function(page) {
  5110.     return "<img class=\"thumb\" src=\"" + page.urlThumb + "\" onclick=\"gotoPage(" + page.num + "); \" />";
  5111. }
  5112. core.HtmlHelper.toBookmarksHtml = function(bookmarks,singleMode,lbEnable,rbEnable) {
  5113.     var s = "";
  5114.     s += "<div id=\"op\">";
  5115.     s += "<textarea id=\"bookmarknote\"></textarea>";
  5116.     if(singleMode) s += "<button onclick=\"addBookmark(0)\">Add Bookmark</button>"; else {
  5117.         if(lbEnable) s += "<button onclick=\"addBookmark(-1)\">Add Left Bookmark</button>"; else s += "<button disabled=\"disabled\">Add Left Bookmark</button>";
  5118.         if(rbEnable) s += "<button onclick=\"addBookmark(1)\">Add Right Bookmark</button>"; else s += "<button disabled=\"disabled\">Add Right Bookmark</button>";
  5119.     }
  5120.     s += "<button>Remove All</button>";
  5121.     s += "</div>";
  5122.     s += "<ul style=\"margin:20px 0px 0px 0px;padding-left:5px;padding-right:5px;\">";
  5123.     if(bookmarks != null) {
  5124.         var _g1 = 0, _g = bookmarks.length;
  5125.         while(_g1 < _g) {
  5126.             var i = _g1++;
  5127.             var bookmark = bookmarks[i];
  5128.             s += core.HtmlHelper.toBookmarkNodeHtml(bookmark);
  5129.         }
  5130.     }
  5131.     s += "</ul>";
  5132.     return s;
  5133. }
  5134. core.HtmlHelper.toBookmarkNodeHtml = function(bookmark) {
  5135.     var s = "";
  5136.     s += "<li class=\"bookmarkrow\" >";
  5137.     s += "<p class=\"p1\" onclick=\"gotoPage(" + Std.string(bookmark.pageNum - 1) + ")\" > P" + bookmark.pageNum + "</p>";
  5138.     s += "<p class=\"p2\" onclick=\"gotoPage(" + Std.string(bookmark.pageNum - 1) + ")\">" + bookmark.text + "</p>";
  5139.     s += "<button onclick=\"removeBookmark(" + Std.string(bookmark.pageNum - 1) + ")\" style=\"float:right;margin:0px -2px;\">" + L.s("RemoveBookmark","Remove") + "</button>";
  5140.     s += "</li>";
  5141.     return s;
  5142. }
  5143. core.HtmlHelper.toSearchHtml = function() {
  5144.     return StringTools.replace(RunTime.searchHtmlCache,"$Search",L.s("Search"));
  5145. }
  5146. core.HtmlHelper.toSearchResultHtml = function(results) {
  5147.     var s = "";
  5148.     s += "<table>";
  5149.     var _g1 = 0, _g = results.length;
  5150.     while(_g1 < _g) {
  5151.         var i = _g1++;
  5152.         var item = results[i];
  5153.         s += "<tr onclick=\"gotoPage(" + Std.string(item.page - 1) + ")\">";
  5154.         s += "<td width=\"40px\" class=\"colPage\">";
  5155.         s += "P" + Std.string(item.page);
  5156.         s += "</td>";
  5157.         s += "<td class=\"colContent\">";
  5158.         s += item.content;
  5159.         s += "</td>";
  5160.         s += "</tr>";
  5161.     }
  5162.     s += "</table>";
  5163.     return s;
  5164. }
  5165. core.HtmlHelper.toVideoHtml = function(video) {
  5166.     return video.toHtml();
  5167. }
  5168. core.HtmlHelper.toRectVideoHtml = function(video,xx,yy,ww,hh) {
  5169.     var loop = video.autoRepeat?"loop":"";
  5170.     var s = "";
  5171.     s += "<div id=\"" + video.id + "\" style=\"position:absolute;z-index:101;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  5172.     s += "<video class=\"video-js\" src=\"" + video.url + "\" width=\"" + Std.string(Math.round(ww)) + "\" height=\"" + Std.string(Math.round(hh)) + "\" controls autoplay preload onloadeddata='RunTime.logVideoView(\"" + video.url + "\", \"" + video.youtubeId + "\")' " + loop + " >";
  5173.     s += "</video>";
  5174.     s += "</div>";
  5175.     return s;
  5176. }
  5177. core.HtmlHelper.toRectYoutubeVideoHtml = function(video,xx,yy,ww,hh) {
  5178.     var s = "";
  5179.     s += "<div id=\"" + video.id + "\" style=\"position:absolute;z-index:101;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:1px;height:1px;\">";
  5180.     s += "<iframe frameborder=\"0\" type=\"text/html\"" + "\" width=\"" + Std.string(Math.round(ww)) + "\" height=\"" + Std.string(Math.round(hh)) + "\"" + " src=\"http://www.youtube.com/embed/" + video.youtubeId + "?controls=1&antoplay=1&enablejsapi=1\">";
  5181.     s += "</iframe>";
  5182.     s += "</div>";
  5183.     return s;
  5184. }
  5185. core.HtmlHelper.toSlideshow = function(slideshow) {
  5186.     return slideshow.toHtml();
  5187. }
  5188. core.HtmlHelper.toSlideshowPopupHtml = function(item) {
  5189.     var w = item.getScaleWidth() + 25;
  5190.     var h = item.getScaleHeight() + 25;
  5191.     if(item.popupWidth != null && item.popupHeight != null) {
  5192.         w = item.popupWidth;
  5193.         h = item.popupHeight;
  5194.     }
  5195.     if(RunTime.clientWidth < 480) {
  5196.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  5197.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  5198.     }
  5199.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5200.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5201.     var window_color = "#333333";
  5202.     var s = "";
  5203.     s += "<div id=\"popupSlideshow\" style=\"position:absolute; z-index:204; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px;  background-color:#7f7f7f; color:#fff; text-align:left;-moz-transform: scale(0.2);-moz-transition:width  0s ease-out; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \">";
  5204.     s += "<div style=\"height:" + Std.string(h - 24) + "px; overflow:hidden; line-height:120%; text-align:center; background-color:" + window_color + "; margin:6px; padding:6px;\">";
  5205.     s += item.htmlContent;
  5206.     s += "</div>";
  5207.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();RunTime.clearSlideshowContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5208.     s += "</div>";
  5209.     return s;
  5210. }
  5211. core.HtmlHelper.toSlideShowHtml = function(slideshow,xx,yy,ww,hh,scale) {
  5212.     var offY = 45;
  5213.     var s = "";
  5214.     if(slideshow.showAsButton == true) {
  5215.         if(slideshow.transition == "move") {
  5216.             slideshow.htmlContent += "<div >";
  5217.             slideshow.htmlContent += "<div  style=\"width: 100%;overflow: hidden;\">";
  5218.             slideshow.htmlContent += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" style=\"width:" + slideshow.slides.length * 100 + "%;\">";
  5219.             var _g1 = 0, _g = slideshow.slides.length;
  5220.             while(_g1 < _g) {
  5221.                 var i = _g1++;
  5222.                 slideshow.htmlContent += "<article style=\"width:" + 1 / slideshow.slides.length * 100 + "%;\">";
  5223.                 slideshow.htmlContent += "<img src=\"" + slideshow.slides[i].url + "\" onclick=\"RunTime.navigateUrl('" + slideshow.slides[i].href + "');\">";
  5224.                 slideshow.htmlContent += "</article>";
  5225.             }
  5226.             slideshow.htmlContent += "</div>";
  5227.             slideshow.htmlContent += "</div>";
  5228.             slideshow.htmlContent += "</div>";
  5229.         } else if(slideshow.transition == "fade") {
  5230.             slideshow.htmlContent += "<div >";
  5231.             slideshow.htmlContent += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" >";
  5232.             var _g1 = 0, _g = slideshow.slides.length;
  5233.             while(_g1 < _g) {
  5234.                 var i = _g1++;
  5235.                 var sid = slideshow.id + "_" + (slideshow.slides.length - i);
  5236.                 slideshow.htmlContent += "<article style=\"text-align:left;width:100%;overflow: hidden;background:" + slideshow.bgColor + ";position:absolute;\"" + " id=\"a_" + sid + "\">";
  5237.                 slideshow.htmlContent += "<img id=\"" + sid + "\" src=\"" + slideshow.slides[slideshow.slides.length - i - 1].url + "\"" + " onclick=\"RunTime.navigateUrl('" + slideshow.slides[slideshow.slides.length - i - 1].href + "');\" " + " style=\"" + "\"" + " onload=\"RunTime.resizeSlide(this," + (ww | 0) + "," + (hh | 0) + ",'" + sid + "'," + scale + ");\"" + ">";
  5238.                 slideshow.htmlContent += "</article>";
  5239.             }
  5240.             slideshow.htmlContent += "</div>";
  5241.             slideshow.htmlContent += "</div>";
  5242.         }
  5243.         RunTime.slideshowPopupHtml = "";
  5244.         RunTime.slideshowPopupHtml = core.HtmlHelper.toSlideshowPopupHtml(slideshow);
  5245.         s += "<div id=\"" + "slideshowButtonImg" + "\" style=\"position:absolute;z-index:99;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  5246.         var sid = "buttonImg_" + slideshow.id + "_" + 1;
  5247.         s += "<img id=\"" + sid + "\" src=\"" + slideshow.slides[0].url + "\"" + " onclick=\"RunTime.showAsButtonClick();\" " + " style=\"" + "cursor:pointer;" + "\"" + " onload=\"RunTime.resizeSlide(this," + (ww | 0) + "," + (hh | 0) + ",'" + sid + "'," + scale + ");\"" + ">";
  5248.         s += "</div>";
  5249.     } else {
  5250.         var offY1 = 45;
  5251.         if(slideshow.transition == "move") {
  5252.             s += "<div class=\"" + "slides" + "\" style=\"position:absolute;z-index:108;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy) - offY1) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  5253.             s += "<div  style=\"width: 100%;overflow: hidden;\">";
  5254.             s += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" style=\"width:" + slideshow.slides.length * 100 + "%;\">";
  5255.             var _g1 = 0, _g = slideshow.slides.length;
  5256.             while(_g1 < _g) {
  5257.                 var i = _g1++;
  5258.                 s += "<article style=\"width:" + 1 / slideshow.slides.length * 100 + "%;\">";
  5259.                 s += "<img src=\"" + slideshow.slides[i].url + "\" onclick=\"RunTime.navigateUrl('" + slideshow.slides[i].href + "');\">";
  5260.                 s += "</article>";
  5261.             }
  5262.             s += "</div>";
  5263.             s += "</div>";
  5264.             s += "</div>";
  5265.         } else if(slideshow.transition == "fade") {
  5266.             s += "<div class=\"" + "slides" + "\" style=\"position:absolute;z-index:108;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy) - offY1) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  5267.             s += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" >";
  5268.             var _g1 = 0, _g = slideshow.slides.length;
  5269.             while(_g1 < _g) {
  5270.                 var i = _g1++;
  5271.                 var sid = slideshow.id + "_" + (slideshow.slides.length - i);
  5272.                 s += "<article style=\"text-align:left;width:100%;overflow: hidden;background:" + slideshow.bgColor + ";position:absolute;\"" + " id=\"a_" + sid + "\">";
  5273.                 s += "<img id=\"" + sid + "\" src=\"" + slideshow.slides[slideshow.slides.length - i - 1].url + "\"" + " onclick=\"RunTime.navigateUrl('" + slideshow.slides[slideshow.slides.length - i - 1].href + "');\" " + " style=\"" + "\"" + " onload=\"RunTime.resizeSlide(this," + (ww | 0) + "," + (hh | 0) + ",'" + sid + "'," + scale + ");\"" + ">";
  5274.                 s += "</article>";
  5275.             }
  5276.             s += "</div>";
  5277.             s += "</div>";
  5278.         }
  5279.     }
  5280.     return s;
  5281. }
  5282. core.HtmlHelper.toPopupImageHtml = function(item,success) {
  5283.     var w = RunTime.clientWidth * 0.9 | 0;
  5284.     var h = RunTime.clientHeight * 0.9 | 0;
  5285.     if(item.popupWidth != null && item.popupHeight != null) {
  5286.         w = item.popupWidth;
  5287.         h = item.popupHeight;
  5288.     } else {
  5289.         var img = null;
  5290.         var onload = function() {
  5291.             item.popupWidth = img.image.width;
  5292.             item.popupHeight = img.image.height;
  5293.             core.HtmlHelper.toPopupImageHtml(item,success);
  5294.         };
  5295.         img = new core.Html5Image(item.destination,onload);
  5296.         return;
  5297.     }
  5298.     var helper = new orc.utils.ImageMetricHelper(w,h);
  5299.     var scale = helper.getMaxFitScale(RunTime.clientWidth * 0.9,RunTime.clientHeight * 0.9);
  5300.     h = h * scale | 0;
  5301.     w = w * scale | 0;
  5302.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5303.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5304.     var s = "";
  5305.     if(item.popupWidth != null && item.popupHeight != null) {
  5306.         s = "";
  5307.         s += "<div id=\"popupImage\" style=\"position:absolute; z-index:200;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff; -moz-transform: scale(0.2);-moz-transition: width 0s ease-out;-webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \" >";
  5308.         s += "<img src=\"" + Std.string(item.destination) + "\" style=\"width:" + Std.string(w) + "px;height:" + Std.string(h) + "px;\" />";
  5309.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5310.         s += "</div>";
  5311.     } else {
  5312.         s = "";
  5313.         s += "<div style=\"position:absolute;z-index:200; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  5314.         s += "<div style=\"margin:0 auto; \">";
  5315.         s += "<img src=\"" + Std.string(item.destination) + "\" style=\"max-width:" + Std.string(w) + "px;max-height:" + Std.string(h) + "px;\" />";
  5316.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5317.         s += "</div>";
  5318.         s += "</div>";
  5319.     }
  5320.     if(success != null) success(s);
  5321. }
  5322. core.HtmlHelper.toPopupVideoHtml = function(item) {
  5323.     var w = 600;
  5324.     var h = 480;
  5325.     if(item.popupWidth != null && item.popupHeight != null) {
  5326.         w = item.popupWidth;
  5327.         h = item.popupHeight;
  5328.     }
  5329.     if(RunTime.clientWidth < 480) {
  5330.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  5331.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  5332.     }
  5333.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5334.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5335.     var s = "";
  5336.     s += "<div id=\"popupVideo\"style=\"position:absolute; z-index:201;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff;-moz-transform: scale(0.2);-moz-transition: width 0s ease-out; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \">";
  5337.     if(item.youtubeId == null || item.youtubeId == "") {
  5338.         s += "<video class=\"video-js\" src=\"" + Std.string(item.destination) + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay preload onloadstart='this.play()' >";
  5339.         s += "</video>";
  5340.     } else {
  5341.         s += "<div style=\"position:absolute;padding-left:0px;padding-top:0px;\">";
  5342.         s += "<iframe frameborder=\"0\" type=\"text/html\"" + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\"" + " src=\"http://www.youtube.com/embed/" + Std.string(item.youtubeId) + "?controls=1&antoplay=1&enablejsapi=1\">";
  5343.         s += "</iframe>";
  5344.         s += "</div>";
  5345.     }
  5346.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5347.     s += "</div>";
  5348.     return s;
  5349. }
  5350. core.HtmlHelper.toPopupPageAudiosHtml = function(audio,isLeft) {
  5351.     if(isLeft == null) isLeft = true;
  5352.     var w = 200;
  5353.     var h = 40;
  5354.     var left = 20;
  5355.     var top = 20;
  5356.     var s = "";
  5357.     if(audio == null) return s;
  5358.     if(isLeft == true) {
  5359.         s += "<div style=\"position:absolute; z-index:102;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  5360.         s += "<audio class=\"video-js\" src=\"" + audio.url + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay >";
  5361.         s += "</audio>";
  5362.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearLeftBgAudio();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5363.         s += "</div>";
  5364.     } else {
  5365.         s += "<div style=\"position:absolute; z-index:102;left:" + Std.string(RunTime.clientWidth / 2 + left | 0) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  5366.         s += "<audio class=\"video-js\" src=\"" + audio.url + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay >";
  5367.         s += "</audio>";
  5368.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearRightBgAudio();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5369.         s += "</div>";
  5370.     }
  5371.     return s;
  5372. }
  5373. core.HtmlHelper.toPopupAudioHtml = function(item) {
  5374.     var w = 200;
  5375.     var h = 40;
  5376.     var left = 20;
  5377.     var top = 20;
  5378.     var s = "";
  5379.     s += "<div style=\"position:absolute; z-index:203;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  5380.     s += "<audio class=\"video-js\" src=\"" + Std.string(item.destination) + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay >";
  5381.     s += "</audio>";
  5382.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearAudio();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5383.     s += "</div>";
  5384.     return s;
  5385. }
  5386. core.HtmlHelper.toPopupHtml = function(item) {
  5387.     var w = 600;
  5388.     var h = 480;
  5389.     if(item.popupWidth != null && item.popupHeight != null) {
  5390.         w = item.popupWidth;
  5391.         h = item.popupHeight;
  5392.     }
  5393.     if(RunTime.clientWidth < 480) {
  5394.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  5395.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  5396.     }
  5397.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5398.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5399.     var window_color = "#333333";
  5400.     if(item.window_color != null) window_color = item.window_color;
  5401.     var isIframe = false;
  5402.     if(item.htmlText != null) {
  5403.         if(item.htmlText.indexOf("iframe") != -1) isIframe = true;
  5404.     }
  5405.     var s = "";
  5406.     s += "<div id=\"popupMessage\" style=\"position:absolute; z-index:204; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#7f7f7f; color:#fff; text-align:left;-moz-transform: scale(0.2);-moz-transition:width  0s ease-out; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \">";
  5407.     s += "<div style=\"overflow-x:hidden; overflow-y:auto; height:" + Std.string(h - 24) + "px; line-height:120%; background-color:" + window_color + "; margin:6px; padding:0 6px 6px 6px;\">";
  5408.     if(!isIframe) s += "<pre style=\"white-space:pre-wrap; word-wrap:break-word;\">";
  5409.     s += Std.string(item.htmlText);
  5410.     if(!isIframe) s += "</pre>";
  5411.     s += "</div>";
  5412.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5413.     s += "</div>";
  5414.     return s;
  5415. }
  5416. core.HtmlHelper.toBookmarkPopupHtml = function(item) {
  5417.     var w = 600;
  5418.     var h = 480;
  5419.     if(RunTime.clientWidth < 480) {
  5420.         w = w * (RunTime.clientWidth / w) * 0.8 | 0;
  5421.         h = h * (RunTime.clientHeight / h) * 0.8 | 0;
  5422.     }
  5423.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5424.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5425.     var s = "";
  5426.     s += "<div style=\"position:absolute; z-index:104; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff; text-align:left; \">";
  5427.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5428.     s += "</div>";
  5429.     return s;
  5430. }
  5431. core.HtmlHelper.toHighLightPopupHtml = function(item,szSaveFunName,szDeleteFunName) {
  5432.     var w = 300;
  5433.     var h = 200;
  5434.     if(item.popupWidth != null && item.popupHeight != null) {
  5435.         w = item.popupWidth;
  5436.         h = item.popupHeight;
  5437.     }
  5438.     if(RunTime.clientWidth < 480) {
  5439.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  5440.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  5441.     }
  5442.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5443.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5444.     var colorString = item.color;
  5445.     if(colorString == "") colorString = "rgba(0,255,0,0.4)";
  5446.     colorString = HxOverrides.substr(colorString,5,null);
  5447.     var results = colorString.split(",");
  5448.     var colorR = StringTools.hex(Std.parseInt(results[0]),2);
  5449.     var colorG = StringTools.hex(Std.parseInt(results[1]),2);
  5450.     var colorB = StringTools.hex(Std.parseInt(results[2]),2);
  5451.     var newColorString = "#" + colorR + colorG + colorB;
  5452.     var s = "";
  5453.     s += "<div style=\"position:absolute; z-index:800; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px;  \">" + "<div style=\"margin:0 0; position:absolute; background-color:black;" + "-webkit-border-radius:10px; border:1px solid #ccc; opacity:0.6;width:300px; height:200px;\">" + "</div>" + "<div style=\"position:absolute;top:10px; left:10px; width:280px;" + "background-color:#ffffff; border:1px solid #ccc;margin:0 0;\">" + "<div style=\"width:280px; height:128px; background:#ffffff; padding-top:22px; \">" + "<div id=\"colorPicker\" style=\"position:absolute; top:0px; left:0px;\"><input type=\"button\" value=\"\" id=\"showColor\" style=\"width:150px; background:" + newColorString + "; border:1px solid #ccc; height:20px;\" onclick=\"showHighlightColor()\" /><input type=\"hidden\" id=\"showVal\" value=\"\"><div id=\"color\" style=\"display:none; position:absolute;top:0px;left:0px; background:#ffffff; z-index:810; \"></div></div>" + "<textarea id=\"textNote\" style=\"width:275px; height:123px; border:0px\">" + Std.string(item.note.text) + "</textarea>" + "</div>" + "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-20px;top:-20px;\" />" + "</div>" + "<div style=\"position:absolute;top:182px; left:10px;width:280px; margin:0 0; \">" + "<img onclick=\"" + szSaveFunName + "()\" src=\"content/images/save.png\" style=\"position:absolute;" + "left:5px; top:-16px;  \"/>" + "<img onclick=\"" + szDeleteFunName + "()\" src=\"content/images/garbage.png\" style=\"position:absolute;" + "left:75px; top:-16px;  \"/>" + "</div>" + "</div>";
  5454.     return s;
  5455. }
  5456. core.HtmlHelper.toNotePopupHtml = function(item,szSaveFunName,szDeleteFunName) {
  5457.     var w = 300;
  5458.     var h = 200;
  5459.     if(item.popupWidth != null && item.popupHeight != null) {
  5460.         w = item.popupWidth;
  5461.         h = item.popupHeight;
  5462.     }
  5463.     if(RunTime.clientWidth < 480) {
  5464.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  5465.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  5466.     }
  5467.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5468.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5469.     var s = "";
  5470.     s += "<div style=\"position:absolute; z-index:800; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px;  \">" + "<div style=\"margin:0 0; position:absolute; background-color:black;" + "-webkit-border-radius:10px; border:1px solid #ccc; opacity:0.6;width:300px; height:200px;\">" + "</div>" + "<div style=\"position:absolute;top:10px; left:10px; width:280px;" + "background-color:#ffffff; border:1px solid #ccc;margin:0 0;\">" + "<div style=\"width:280px; height:150px; background:#ffffff\">" + "<textarea id=\"textNote\" style=\"width:275px; height:145px; border:0px\">" + Std.string(item.note.text) + "</textarea>" + "</div>" + "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-20px;top:-20px;\" />" + "</div>" + "<div style=\"position:absolute;top:182px; left:10px;width:280px; margin:0 0; \">" + "<img onclick=\"" + szSaveFunName + "()\" src=\"content/images/save.png\" style=\"position:absolute;" + "left:5px; top:-16px\"/>" + "<img onclick=\"" + szDeleteFunName + "()\" src=\"content/images/garbage.png\" style=\"position:absolute;" + "left:75px; top:-16px\"/>" + "</div>" + "</div>";
  5471.     return s;
  5472. }
  5473. core.HtmlHelper.toInputPwdHtml = function() {
  5474.     var left = (RunTime.clientWidth - 300) / 2;
  5475.     var top = (RunTime.clientHeight - 180) / 2;
  5476.     var pos = "position:absolute;z-index:200; left:" + Std.string(Math.round(left)) + "px; top:" + Std.string(Math.round(top)) + "px;";
  5477.     var s = "";
  5478.     s += "<div id=\"inputBox\" style=\" " + pos + " width:300px; height:120px;background-color:#CCCCCC; \">";
  5479.     s += "<p>" + L.s("NeedPassword") + "</p>";
  5480.     s += "<input id=\"tbKeyword\" type=\"password\" style=\"width:120px; height:20px; \"  onkeypress=\"return onInputKeyPress(event)\" />";
  5481.     s += "<input type=\"button\" style=\"height:20px; \" value=\"" + L.s("Submit") + "\" onclick=\"inputPwd(); \" />";
  5482.     s += "</div>";
  5483.     return s;
  5484. }
  5485. core.HtmlHelper.toInputUnlockPwdHtml = function() {
  5486.     var left = (RunTime.clientWidth - 300) / 2;
  5487.     var top = (RunTime.clientHeight - 180) / 2;
  5488.     var pos = "position:absolute;z-index:200;left:" + Std.string(Math.round(left)) + "px; top:" + Std.string(Math.round(top)) + "px;";
  5489.     var s = "";
  5490.     s += "<div id=\"inputBox\" style=\" " + pos + " width:300px; height:120px;background-color:#CCCCCC; \">";
  5491.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-10px;top:-10px;\" />";
  5492.     s += "<p>" + L.s("NeedPassword") + "</p>";
  5493.     s += "<input id=\"tbKeyword\" type=\"password\" style=\"width:120px; height:20px; \"  onkeypress=\"return onUnlockKeyPress(event)\" />";
  5494.     s += "<input type=\"button\" style=\"height:20px; \" value=\"" + L.s("Submit") + "\" onclick=\"unlockPage(); \" />";
  5495.     s += "</div>";
  5496.     return s;
  5497. }
  5498. core.LangCfg = function() {
  5499.     this.content = null;
  5500.     this.isDefault = false;
  5501. };
  5502. core.LangCfg.__name__ = true;
  5503. core.LangCfg.prototype = {
  5504.     __class__: core.LangCfg
  5505. }
  5506. core.Note = function() {
  5507.     this.image = new Image();
  5508.     this.image.src = "content/images/iconNote.png";
  5509.     this.text = "";
  5510.     this.x = 0;
  5511.     this.y = 0;
  5512.     this.guid = "";
  5513. };
  5514. core.Note.__name__ = true;
  5515. core.Note.prototype = {
  5516.     hitTest: function(x,y) {
  5517.         if(this.image == null) return false;
  5518.         if(x < this.x || y < this.y || x > this.x + this.image.width || y > this.y + this.image.height) return false;
  5519.         return true;
  5520.     }
  5521.     ,loadToContext2D: function(context) {
  5522.         if(this.image != null) context.drawImage(this.image,this.x,this.y);
  5523.     }
  5524.     ,draw: function() {
  5525.         if(this.canvas == null || this.image == null) return;
  5526.         var context = this.getContext();
  5527.         context.drawImage(this.image,this.x,this.y);
  5528.     }
  5529.     ,getContext: function() {
  5530.         return this.canvas.getContext("2d");
  5531.     }
  5532.     ,setCanvas: function(canvas) {
  5533.         this.canvas = canvas;
  5534.     }
  5535.     ,setImage: function(image) {
  5536.         this.image = image;
  5537.     }
  5538.     ,__class__: core.Note
  5539. }
  5540. core.NoteIcon = function() {
  5541.     this.note = new core.Note();
  5542.     this.x = 0;
  5543.     this.y = 0;
  5544.     this.width = 0;
  5545.     this.height = 0;
  5546.     this.pageNum = -1;
  5547.     this.guid = "";
  5548.     this.checked = false;
  5549.     this.pageLayoutType = 0;
  5550.     this.scale = 1;
  5551.     this.offsetX = 0;
  5552.     this.offsetY = 0;
  5553. };
  5554. core.NoteIcon.__name__ = true;
  5555. core.NoteIcon.prototype = {
  5556.     click: function(popupXOffset,popupYOffset) {
  5557.         if(popupYOffset == null) popupYOffset = 0;
  5558.         if(popupXOffset == null) popupXOffset = 0;
  5559.         RunTime.showPopupMaskLayer();
  5560.         RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  5561.         js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toNotePopupHtml(this,"saveNote","deleteNote");
  5562.         js.Lib.document.getElementById("textNote").focus();
  5563.     }
  5564.     ,moveSave: function() {
  5565.         if(this.twidth == 0 || this.theight == 0) return;
  5566.         localStorage.setItem(this.guid,this.toJSONString());
  5567.     }
  5568.     ,TransformData: function(vx,vy) {
  5569.         var dp = this.getDrawParams();
  5570.         if(RunTime.book.rightToLeft) {
  5571.             if(vx > RunTime.clientWidth / 2) dp = this.getLeftDrawParams(); else dp = this.getRightDrawParams();
  5572.         } else if(vx > RunTime.clientWidth / 2) dp = this.getRightDrawParams(); else dp = this.getLeftDrawParams();
  5573.         this.x = dp.sx + (vx - dp.dx) / (dp.dw / dp.sw) - this.width / 2;
  5574.         this.y = dp.sy + (vy - dp.dy) / (dp.dh / dp.sh) - this.height / 2;
  5575.     }
  5576.     ,moveClick: function(cx,cy) {
  5577.         if(cy == null) cy = 0;
  5578.         if(cx == null) cx = 0;
  5579.         this.TransformData(cx,cy);
  5580.         RunTime.clearPopupContents();
  5581.         RunTime.flipBook.bookContext.render();
  5582.     }
  5583.     ,hitTest: function(mouseX,mouseY) {
  5584.         var dp = this.getDrawParams();
  5585.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5586.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5587.         var ww = this.width * (dp.dw / dp.sw);
  5588.         var hh = this.height * (dp.dh / dp.sh);
  5589.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  5590.         return result;
  5591.     }
  5592.     ,draw: function(context) {
  5593.         var radius = 5;
  5594.         context.save();
  5595.         context.fillStyle = "rgba(255,0,0,0.4)";
  5596.         context.fillRect(this.tx | 0,this.ty | 0,this.twidth | 0,this.theight | 0);
  5597.         context.restore();
  5598.         if(this.note != null) {
  5599.             this.note.x = this.tx;
  5600.             this.note.y = this.ty - this.note.image.height;
  5601.             this.note.draw();
  5602.         }
  5603.     }
  5604.     ,loadToContext2D: function(context) {
  5605.         var radius = 5;
  5606.         context.save();
  5607.         context.fillStyle = "rgba(255,0,0,0.4)";
  5608.         var dp = this.getDrawParams();
  5609.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5610.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5611.         var ww = this.width * (dp.dw / dp.sw);
  5612.         var hh = this.height * (dp.dh / dp.sh);
  5613.         context.drawImage(this.note.image,xx | 0,yy | 0,ww | 0,hh | 0);
  5614.         context.restore();
  5615.         if(this.note != null) {
  5616.             this.note.x = this.x;
  5617.             this.note.y = this.y - this.note.image.height;
  5618.             this.note.draw();
  5619.         }
  5620.     }
  5621.     ,remove: function() {
  5622.         localStorage.removeItem(this.guid);
  5623.     }
  5624.     ,updateText: function(text) {
  5625.         this.note.text = text;
  5626.         localStorage.setItem(this.guid,this.toJSONString());
  5627.     }
  5628.     ,setChecked: function(bChecked) {
  5629.         this.checked = bChecked;
  5630.         if(this.checked) {
  5631.         } else {
  5632.         }
  5633.     }
  5634.     ,fillData: function(guid,json) {
  5635.         var objJSON = JSON.parse(json);
  5636.         this.x = Std.parseFloat(objJSON.obj[0].x);
  5637.         this.y = Std.parseFloat(objJSON.obj[0].y);
  5638.         this.width = Std.parseFloat(objJSON.obj[0].width);
  5639.         this.height = Std.parseFloat(objJSON.obj[0].height);
  5640.         this.note.text = objJSON.obj[0].note;
  5641.         this.pageNum = Std.parseInt(objJSON.obj[0].page);
  5642.         this.guid = guid;
  5643.     }
  5644.     ,DataTransform: function() {
  5645.         var dp = this.getDrawParams();
  5646.         this.pageNum = this.tpageNum;
  5647.         if(RunTime.singlePage) {
  5648.         } else if(RunTime.book.rightToLeft) {
  5649.             if(this.tx > RunTime.clientWidth / 2) dp = this.getLeftDrawParams(); else dp = this.getRightDrawParams();
  5650.         } else if(this.tx > RunTime.clientWidth / 2) dp = this.getRightDrawParams(); else dp = this.getLeftDrawParams();
  5651.         this.x = dp.sx + (this.tx - dp.dx) / (dp.dw / dp.sw);
  5652.         this.y = dp.sy + (this.ty - dp.dy) / (dp.dh / dp.sh);
  5653.         this.width = this.twidth / (dp.dw / dp.sw);
  5654.         this.height = this.theight / (dp.dh / dp.sh);
  5655.         haxe.Log.trace("x=" + this.x + ",y=" + this.y + ",width=" + this.width + ",height=" + this.height,{ fileName : "NoteIcon.hx", lineNumber : 198, className : "core.NoteIcon", methodName : "DataTransform"});
  5656.     }
  5657.     ,save: function() {
  5658.         if(this.twidth == 0 || this.theight == 0) return;
  5659.         this.guid = RunTime.kvPrex + "@$ni$@" + new Date().getTime();
  5660.         this.DataTransform();
  5661.         localStorage.setItem(this.guid,this.toJSONString());
  5662.     }
  5663.     ,toJSONString: function() {
  5664.         var json = "{\"obj\":[{\"x\":\"" + this.x + "\",\"y\":\"" + this.y + "\",\"width\":\"" + this.width + "\",\"height\":\"" + this.height + "\",\"page\":\"" + this.pageNum + "\",\"note\":\"" + this.note.text + "\"}]}";
  5665.         return json;
  5666.     }
  5667.     ,getBottom: function() {
  5668.         return this.y + this.height;
  5669.     }
  5670.     ,getTop: function() {
  5671.         return this.y;
  5672.     }
  5673.     ,getRight: function() {
  5674.         return this.x + this.width;
  5675.     }
  5676.     ,getLeft: function() {
  5677.         return this.x;
  5678.     }
  5679.     ,getContext: function() {
  5680.         return this.canvas.getContext("2d");
  5681.     }
  5682.     ,setCanvas: function(canvas) {
  5683.         this.canvas = canvas;
  5684.         if(this.note != null) this.note.setCanvas(this.canvas);
  5685.     }
  5686.     ,clone: function() {
  5687.         this.DataTransform();
  5688.         var hl = new core.NoteIcon();
  5689.         hl.x = this.x;
  5690.         hl.y = this.y;
  5691.         hl.width = this.width;
  5692.         hl.height = this.height;
  5693.         hl.pageNum = this.pageNum;
  5694.         hl.guid = this.guid;
  5695.         hl.note.text = this.note.text;
  5696.         return hl;
  5697.     }
  5698.     ,getRightDrawParams: function() {
  5699.         var dp = RunTime.getDrawParams(1);
  5700.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  5701.         return dp;
  5702.     }
  5703.     ,getLeftDrawParams: function() {
  5704.         var dp = RunTime.getDrawParams(-1);
  5705.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  5706.         return dp;
  5707.     }
  5708.     ,getDrawParams: function() {
  5709.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  5710.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  5711.         return dp;
  5712.     }
  5713.     ,__class__: core.NoteIcon
  5714. }
  5715. core.Page = function() {
  5716.     this.locked = false;
  5717.     this.canZoom = true;
  5718.     this.aniScale = 1;
  5719.     this.visible = true;
  5720.     this.pageOffset = 0;
  5721.     this.scale = 1;
  5722.     this.offsetX = 0;
  5723.     this.offsetY = 0;
  5724.     this.bigMode = false;
  5725.     this.locked = false;
  5726. };
  5727. core.Page.__name__ = true;
  5728. core.Page.prototype = {
  5729.     clipImage: function(ctx,img,sx,sy,sw,sh,dx,dy,dw,dh) {
  5730.         if(img.src == null || img.src == "") {
  5731.             js.Lib.alert("no data");
  5732.             return;
  5733.         }
  5734.         var pw = RunTime.book.pageWidth;
  5735.         var ph = RunTime.book.pageHeight;
  5736.         var rw = img.width;
  5737.         var rh = img.height;
  5738.         var scaleX = rw / pw;
  5739.         var scaleY = rh / ph;
  5740.         sx = sx * scaleX;
  5741.         sy = sy * scaleY;
  5742.         sw = sw * scaleX;
  5743.         sh = sh * scaleY;
  5744.         if(sx < 0) sx = 0;
  5745.         if(sy < 0) sy = 0;
  5746.         if(sx + sw > img.width) sw = img.width - sx;
  5747.         if(sy + sh > img.height) sh = img.height - sy;
  5748.         if(sx >= img.width || sy >= img.height) return;
  5749.         if(sw < 1 || sh < 1) return;
  5750.         ctx.save();
  5751.         ctx.drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh);
  5752.         if(RunTime.bLocked && this.locked) {
  5753.             ctx.fillStyle = "rgb(255,255,255)";
  5754.             ctx.fillRect(dx | 0,dy | 0,dw | 0,dh | 0);
  5755.         }
  5756.         ctx.restore();
  5757.     }
  5758.     ,drawImageCore: function(offset) {
  5759.         var dp = this.drawParams.clone();
  5760.         if(dp == null || dp.dw < 2) return;
  5761.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  5762.         if(offset == 0) {
  5763.             this.clipImage(this.ctx,this._imagePage,dp.sx,dp.sy,dp.sw,dp.sh,dp.dx,dp.dy,dp.dw,dp.dh);
  5764.             if(this._imageData == null) {
  5765.             }
  5766.         } else if(offset > 0) this.clipImage(this.ctx,this._imagePage,dp.sx,dp.sy,dp.sw * (1 - offset),dp.sh,dp.dx + dp.dw * offset,dp.dy,dp.dw * (1 - offset),dp.dh); else {
  5767.             offset = -offset;
  5768.             this.clipImage(this.ctx,this._imagePage,dp.sx + offset * dp.sw,dp.sy,dp.sw * (1 - offset),dp.sh,dp.dx,dp.dy,dp.dw * (1 - offset),dp.dh);
  5769.         }
  5770.     }
  5771.     ,draw: function() {
  5772.         if(this.ctx == null) return;
  5773.         if(this.drawParams == null) return;
  5774.         if(this.visible == false) return;
  5775.         var offset = this.pageOffset;
  5776.         if(this.bookContext != null) offset += this.bookContext.pageOffset;
  5777.         if(offset > -1.001 && offset < -1) offset = -1;
  5778.         if(offset > 1 && offset < 1.001) offset = 1;
  5779.         if(offset <= -1 || offset >= 1) return;
  5780.         this.drawImageCore(offset);
  5781.     }
  5782.     ,loadToContext2D: function(ctx) {
  5783.         this.ctx = ctx;
  5784.         if(this._imagePage == null) this.getImagePage();
  5785.         if(this.loaded == true) {
  5786.             RunTime.divLoading.style.display = "none";
  5787.             this.draw();
  5788.         }
  5789.     }
  5790.     ,onMouseClick: function(e) {
  5791.         if(e.localX > this._imagePage.width * 0.5) {
  5792.             if(this.turnRightCallback != null) this.turnRightCallback();
  5793.         } else if(this.turnLeftCallback != null) this.turnLeftCallback();
  5794.     }
  5795.     ,clearCallback: function() {
  5796.         this.turnLeftCallback = null;
  5797.         this.turnRightCallback = null;
  5798.     }
  5799.     ,zoom: function(scale) {
  5800.         this.aniScale += scale;
  5801.     }
  5802.     ,loadBigImagePage: function() {
  5803.         var img = new Image();
  5804.         img.src = this.getBigPageUrl();
  5805.     }
  5806.     ,getPageUrl: function() {
  5807.         return this.urlPage;
  5808.     }
  5809.     ,getBlankPage: function() {
  5810.         return "content/images/bgLock.png";
  5811.     }
  5812.     ,getBigPageUrl: function() {
  5813.         var url = this.urlPage;
  5814.         var seg = url.split("/");
  5815.         if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1) return "content/medium/" + seg[seg.length - 1]; else return "content/pages/" + seg[seg.length - 1];
  5816.     }
  5817.     ,setBigImageMode: function() {
  5818.         this.bigMode = true;
  5819.     }
  5820.     ,getImagePage: function() {
  5821.         if(this._imagePage != null) return this._imagePage;
  5822.         var img = new Image();
  5823.         img.src = this.urlPage;
  5824.         img.onload = $bind(this,this.onLoadImage);
  5825.         RunTime.divLoading.style.display = "inline";
  5826.         this._imagePage = img;
  5827.         return this._imagePage;
  5828.     }
  5829.     ,onLoadImage: function() {
  5830.         RunTime.divLoading.style.display = "none";
  5831.         this.loaded = true;
  5832.         this.draw();
  5833.         if(RunTime.flipBook.currentPageNum == null || RunTime.flipBook.currentPageNum == this.num) {
  5834.             RunTime.flipBook.loadCtxHotlinks();
  5835.             RunTime.flipBook.bookContext.render();
  5836.         }
  5837.     }
  5838.     ,__class__: core.Page
  5839. }
  5840. core.PagePair = function(i) {
  5841.     if(i < 0 || i >= RunTime.book.pages.length) return;
  5842.     this.currentPageNum = i;
  5843.     if(i == 0) {
  5844.         this.rightPage = RunTime.book.pages[i];
  5845.         this.rightPage.isDoublePageMode = true;
  5846.         this.rightPage.pageOffset = 0;
  5847.         this.rightPage.drawParams = RunTime.getDrawParams(1);
  5848.         RunTime.flipBook.zoomRightPage.width = this.rightPage.drawParams.dw | 0;
  5849.         RunTime.flipBook.zoomRightPage.height = this.rightPage.drawParams.dh | 0;
  5850.         RunTime.flipBook.zoomRightPage.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5851.         RunTime.flipBook.zoomRightPage.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5852.         RunTime.flipBook.rightPageLock.style.width = (this.rightPage.drawParams.dw | 0) + "px";
  5853.         RunTime.flipBook.rightPageLock.style.height = (this.rightPage.drawParams.dh | 0) + "px";
  5854.         RunTime.flipBook.rightPageLock.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5855.         RunTime.flipBook.rightPageLock.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5856.         RunTime.flipBook.rightLockIcon.style.left = ((this.rightPage.drawParams.dw - 128) / 2 | 0) + "px";
  5857.         RunTime.flipBook.rightLockIcon.style.top = ((this.rightPage.drawParams.dh - 128) / 2 | 0) + "px";
  5858.     } else if(i == RunTime.book.pages.length - 1 && i % 2 == 1) {
  5859.         this.leftPage = RunTime.book.pages[i];
  5860.         this.leftPage.isDoublePageMode = true;
  5861.         this.leftPage.pageOffset = 0;
  5862.         this.leftPage.drawParams = RunTime.getDrawParams(-1);
  5863.         RunTime.flipBook.zoomLeftPage.width = this.leftPage.drawParams.dw | 0;
  5864.         RunTime.flipBook.zoomLeftPage.height = this.leftPage.drawParams.dh | 0;
  5865.         RunTime.flipBook.zoomLeftPage.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5866.         RunTime.flipBook.zoomLeftPage.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5867.         RunTime.flipBook.leftPageLock.style.width = (this.leftPage.drawParams.dw | 0) + "px";
  5868.         RunTime.flipBook.leftPageLock.style.height = (this.leftPage.drawParams.dh | 0) + "px";
  5869.         RunTime.flipBook.leftPageLock.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5870.         RunTime.flipBook.leftPageLock.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5871.         RunTime.flipBook.leftLockIcon.style.left = ((this.leftPage.drawParams.dw - 128) / 2 | 0) + "px";
  5872.         RunTime.flipBook.leftLockIcon.style.top = ((this.leftPage.drawParams.dh - 128) / 2 | 0) + "px";
  5873.     } else {
  5874.         var right = i + 1 - (i + 1) % 2;
  5875.         var left = right - 1;
  5876.         this.leftPage = RunTime.book.pages[left];
  5877.         this.rightPage = RunTime.book.pages[right];
  5878.         this.leftPage.isDoublePageMode = true;
  5879.         this.rightPage.isDoublePageMode = true;
  5880.         this.leftPage.pageOffset = 0;
  5881.         this.rightPage.pageOffset = 0;
  5882.         this.leftPage.drawParams = RunTime.getDrawParams(-1);
  5883.         this.rightPage.drawParams = RunTime.getDrawParams(1);
  5884.         RunTime.flipBook.zoomRightPage.width = this.rightPage.drawParams.dw | 0;
  5885.         RunTime.flipBook.zoomRightPage.height = this.rightPage.drawParams.dh | 0;
  5886.         RunTime.flipBook.zoomRightPage.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5887.         RunTime.flipBook.zoomRightPage.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5888.         RunTime.flipBook.zoomLeftPage.width = this.leftPage.drawParams.dw | 0;
  5889.         RunTime.flipBook.zoomLeftPage.height = this.leftPage.drawParams.dh | 0;
  5890.         RunTime.flipBook.zoomLeftPage.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5891.         RunTime.flipBook.zoomLeftPage.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5892.         RunTime.flipBook.rightPageLock.style.width = (this.rightPage.drawParams.dw | 0) + "px";
  5893.         RunTime.flipBook.rightPageLock.style.height = (this.rightPage.drawParams.dh | 0) + "px";
  5894.         RunTime.flipBook.rightPageLock.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5895.         RunTime.flipBook.rightPageLock.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5896.         RunTime.flipBook.rightLockIcon.style.left = ((this.rightPage.drawParams.dw - 128) / 2 | 0) + "px";
  5897.         RunTime.flipBook.rightLockIcon.style.top = ((this.rightPage.drawParams.dh - 128) / 2 | 0) + "px";
  5898.         RunTime.flipBook.leftPageLock.style.width = (this.leftPage.drawParams.dw | 0) + "px";
  5899.         RunTime.flipBook.leftPageLock.style.height = (this.leftPage.drawParams.dh | 0) + "px";
  5900.         RunTime.flipBook.leftPageLock.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5901.         RunTime.flipBook.leftPageLock.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5902.         RunTime.flipBook.leftLockIcon.style.left = ((this.leftPage.drawParams.dw - 128) / 2 | 0) + "px";
  5903.         RunTime.flipBook.leftLockIcon.style.top = ((this.leftPage.drawParams.dh - 128) / 2 | 0) + "px";
  5904.     }
  5905. };
  5906. core.PagePair.__name__ = true;
  5907. core.PagePair.prototype = {
  5908.     getNumInDoubleMode: function() {
  5909.         if(this.leftPage != null) return this.leftPage.numInDoubleMode; else if(this.rightPage != null) return this.rightPage.numInDoubleMode; else return -1;
  5910.     }
  5911.     ,match: function(pageNum) {
  5912.         if(this.leftPage != null) {
  5913.             if(this.leftPage.num == pageNum) return -1;
  5914.         }
  5915.         if(this.rightPage != null) {
  5916.             if(this.rightPage.num == pageNum) return 1;
  5917.         }
  5918.         return 0;
  5919.     }
  5920.     ,__class__: core.PagePair
  5921. }
  5922. core.SearchResult = function(content,page) {
  5923.     this.content = content;
  5924.     this.page = page;
  5925. };
  5926. core.SearchResult.__name__ = true;
  5927. core.SearchResult.prototype = {
  5928.     __class__: core.SearchResult
  5929. }
  5930. core.Slide = function() {
  5931. };
  5932. core.Slide.__name__ = true;
  5933. core.Slide.prototype = {
  5934.     __class__: core.Slide
  5935. }
  5936. core.SlideshowInfo = function() {
  5937.     this.bgColor = "";
  5938.     this.htmlContent = "";
  5939.     this.slides = new Array();
  5940.     this.tweener = new core.Tweener();
  5941.     this.idx = 1;
  5942.     this.transition = "fade";
  5943.     this.countOfClip = 0;
  5944. };
  5945. core.SlideshowInfo.__name__ = true;
  5946. core.SlideshowInfo.prototype = {
  5947.     updateLayout: function(dom) {
  5948.         if(dom == null) return;
  5949.         var dp = this.getDrawParams();
  5950.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5951.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5952.         var ww = this.width * (dp.dw / dp.sw);
  5953.         var hh = this.height * (dp.dh / dp.sh);
  5954.         dom.style.left = Std.string(Math.round(xx)) + "px";
  5955.         dom.style.top = Std.string(Math.round(yy)) + "px";
  5956.         var videoDom = dom.firstChild;
  5957.         videoDom.width = Std.string(Math.round(ww));
  5958.         videoDom.height = Std.string(Math.round(hh));
  5959.     }
  5960.     ,toHtml: function() {
  5961.         var dp = this.getDrawParams();
  5962.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5963.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5964.         var ww = this.width * (dp.dw / dp.sw);
  5965.         var hh = this.height * (dp.dh / dp.sh);
  5966.         if(Std.string(this.pagewidth) != "NaN") {
  5967.             if(this.pagewidth != dp.sw) {
  5968.                 ww = dp.sw * (dp.dw / dp.sw);
  5969.                 hh = dp.sh * (dp.dh / dp.sh);
  5970.             }
  5971.         }
  5972.         return core.HtmlHelper.toSlideShowHtml(this,xx,yy,ww,hh,dp.dw / dp.sw);
  5973.     }
  5974.     ,getScaleHeight: function() {
  5975.         var dp = this.getDrawParams();
  5976.         var hh = this.height * (dp.dh / dp.sh);
  5977.         if(Std.string(this.pagewidth) != "NaN") {
  5978.             if(this.pagewidth != dp.sw) hh = dp.sh * (dp.dh / dp.sh);
  5979.         }
  5980.         if(hh >= RunTime.clientHeight) hh = RunTime.clientHeight - 60;
  5981.         return hh;
  5982.     }
  5983.     ,getScaleWidth: function() {
  5984.         var dp = this.getDrawParams();
  5985.         var ww = this.width * (dp.dw / dp.sw);
  5986.         if(Std.string(this.pagewidth) != "NaN") {
  5987.             if(this.pagewidth != dp.sw) ww = dp.sw * (dp.dw / dp.sw);
  5988.         }
  5989.         if(ww >= RunTime.clientWidth) ww = RunTime.clientWidth - 60;
  5990.         return ww;
  5991.     }
  5992.     ,getDrawParams: function() {
  5993.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  5994.         var ctx = RunTime.flipBook.bookContext;
  5995.         dp.applyTransform(ctx.scale,ctx.offsetX,ctx.offsetY);
  5996.         return dp;
  5997.     }
  5998.     ,onSlideChange: function(count) {
  5999.         if(count % this.countOfClip != 0) return;
  6000.         if(this.transition == "move") {
  6001.             var p = js.Lib.document.getElementById("p_" + this.id);
  6002.             if(p != null) {
  6003.                 var pidx = -this.idx * 100;
  6004.                 p.style.marginLeft = Std.string(pidx) + "%";
  6005.             }
  6006.             this.idx++;
  6007.             if(this.idx >= this.slides.length) this.idx = 0;
  6008.         } else {
  6009.             var a = js.Lib.document.getElementById("a_" + this.id + "_" + Std.string(this.idx));
  6010.             this.idx++;
  6011.             if(this.idx == this.slides.length + 1) {
  6012.                 var _g1 = 0, _g = this.slides.length;
  6013.                 while(_g1 < _g) {
  6014.                     var i = _g1++;
  6015.                     var t = i + 1;
  6016.                     var p = js.Lib.document.getElementById("a_" + this.id + "_" + Std.string(t));
  6017.                     if(p != null) p.style.cssText = "text-align:left;width:100%;overflow: hidden;opacity:1;position:absolute;background:" + this.bgColor;
  6018.                 }
  6019.             }
  6020.             if(a != null && this.idx < this.slides.length + 1) a.style.cssText = "text-align:left;opacity: 0 ; -webkit-transition: 0.5s ease-out;width:100%;overflow: hidden;";
  6021.             if(this.idx > this.slides.length) this.idx = 1;
  6022.         }
  6023.     }
  6024.     ,stopTweener: function() {
  6025.         this.tweener.stop();
  6026.     }
  6027.     ,startTweener: function() {
  6028.         this.countOfClip = 50 * Std.parseInt(this.interval);
  6029.         this.tweener.onChange = $bind(this,this.onSlideChange);
  6030.         this.tweener.start(1000000);
  6031.     }
  6032.     ,__class__: core.SlideshowInfo
  6033. }
  6034. core.Tweener = function() {
  6035.     this.count = 0;
  6036.     this.maxCount = 0;
  6037. };
  6038. core.Tweener.__name__ = true;
  6039. core.Tweener.prototype = {
  6040.     onChangeInvoke: function() {
  6041.         this.count++;
  6042.         if(this.onChange == null) return;
  6043.         if(this.count > this.maxCount) return;
  6044.         this.onChange(this.count);
  6045.         this.run();
  6046.     }
  6047.     ,run: function() {
  6048.         if(this.count >= this.maxCount) return;
  6049.         haxe.Timer.delay($bind(this,this.onChangeInvoke),33);
  6050.     }
  6051.     ,stop: function() {
  6052.         this.maxCount = this.count;
  6053.     }
  6054.     ,start: function(max) {
  6055.         if(max == null) max = 1;
  6056.         this.maxCount = max;
  6057.         this.count = 0;
  6058.         this.run();
  6059.     }
  6060.     ,__class__: core.Tweener
  6061. }
  6062. core.VideoInfo = function() {
  6063.     this.pageLayoutType = 0;
  6064.     this.youtubeId = "";
  6065.     this.url = "";
  6066.     this.id = "";
  6067. };
  6068. core.VideoInfo.__name__ = true;
  6069. core.VideoInfo.prototype = {
  6070.     updateLayout: function(dom) {
  6071.         if(dom == null) return;
  6072.         var dp = this.getDrawParams();
  6073.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  6074.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  6075.         var ww = this.width * (dp.dw / dp.sw);
  6076.         var hh = this.height * (dp.dh / dp.sh);
  6077.         dom.style.left = Std.string(Math.round(xx)) + "px";
  6078.         dom.style.top = Std.string(Math.round(yy)) + "px";
  6079.         var videoDom = dom.firstChild;
  6080.         videoDom.width = Std.string(Math.round(ww));
  6081.         videoDom.height = Std.string(Math.round(hh));
  6082.     }
  6083.     ,toHtml: function() {
  6084.         var dp = this.getDrawParams();
  6085.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  6086.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  6087.         var ww = this.width * (dp.dw / dp.sw);
  6088.         var hh = this.height * (dp.dh / dp.sh);
  6089.         if(this.youtubeId != null && this.youtubeId != "") return core.HtmlHelper.toRectYoutubeVideoHtml(this,xx,yy,ww,hh); else return core.HtmlHelper.toRectVideoHtml(this,xx,yy,ww,hh);
  6090.     }
  6091.     ,getDrawParams: function() {
  6092.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  6093.         var ctx = RunTime.flipBook.bookContext;
  6094.         dp.applyTransform(ctx.scale,ctx.offsetX,ctx.offsetY);
  6095.         return dp;
  6096.     }
  6097.     ,__class__: core.VideoInfo
  6098. }
  6099. core.ZoomStatus = { __ename__ : true, __constructs__ : ["normal","zooming","zoomed","zoomin","zoomout"] }
  6100. core.ZoomStatus.normal = ["normal",0];
  6101. core.ZoomStatus.normal.toString = $estr;
  6102. core.ZoomStatus.normal.__enum__ = core.ZoomStatus;
  6103. core.ZoomStatus.zooming = ["zooming",1];
  6104. core.ZoomStatus.zooming.toString = $estr;
  6105. core.ZoomStatus.zooming.__enum__ = core.ZoomStatus;
  6106. core.ZoomStatus.zoomed = ["zoomed",2];
  6107. core.ZoomStatus.zoomed.toString = $estr;
  6108. core.ZoomStatus.zoomed.__enum__ = core.ZoomStatus;
  6109. core.ZoomStatus.zoomin = ["zoomin",3];
  6110. core.ZoomStatus.zoomin.toString = $estr;
  6111. core.ZoomStatus.zoomin.__enum__ = core.ZoomStatus;
  6112. core.ZoomStatus.zoomout = ["zoomout",4];
  6113. core.ZoomStatus.zoomout.toString = $estr;
  6114. core.ZoomStatus.zoomout.__enum__ = core.ZoomStatus;
  6115. haxe.BaseCode = function(base) {
  6116.     var len = base.length;
  6117.     var nbits = 1;
  6118.     while(len > 1 << nbits) nbits++;
  6119.     if(nbits > 8 || len != 1 << nbits) throw "BaseCode : base length must be a power of two.";
  6120.     this.base = base;
  6121.     this.nbits = nbits;
  6122. };
  6123. haxe.BaseCode.__name__ = true;
  6124. haxe.BaseCode.encode = function(s,base) {
  6125.     var b = new haxe.BaseCode(haxe.io.Bytes.ofString(base));
  6126.     return b.encodeString(s);
  6127. }
  6128. haxe.BaseCode.decode = function(s,base) {
  6129.     var b = new haxe.BaseCode(haxe.io.Bytes.ofString(base));
  6130.     return b.decodeString(s);
  6131. }
  6132. haxe.BaseCode.prototype = {
  6133.     decodeString: function(s) {
  6134.         return this.decodeBytes(haxe.io.Bytes.ofString(s)).toString();
  6135.     }
  6136.     ,encodeString: function(s) {
  6137.         return this.encodeBytes(haxe.io.Bytes.ofString(s)).toString();
  6138.     }
  6139.     ,decodeBytes: function(b) {
  6140.         var nbits = this.nbits;
  6141.         var base = this.base;
  6142.         if(this.tbl == null) this.initTable();
  6143.         var tbl = this.tbl;
  6144.         var size = b.length * nbits >> 3;
  6145.         var out = haxe.io.Bytes.alloc(size);
  6146.         var buf = 0;
  6147.         var curbits = 0;
  6148.         var pin = 0;
  6149.         var pout = 0;
  6150.         while(pout < size) {
  6151.             while(curbits < 8) {
  6152.                 curbits += nbits;
  6153.                 buf <<= nbits;
  6154.                 var i = tbl[b.b[pin++]];
  6155.                 if(i == -1) throw "BaseCode : invalid encoded char";
  6156.                 buf |= i;
  6157.             }
  6158.             curbits -= 8;
  6159.             out.b[pout++] = buf >> curbits & 255 & 255;
  6160.         }
  6161.         return out;
  6162.     }
  6163.     ,initTable: function() {
  6164.         var tbl = new Array();
  6165.         var _g = 0;
  6166.         while(_g < 256) {
  6167.             var i = _g++;
  6168.             tbl[i] = -1;
  6169.         }
  6170.         var _g1 = 0, _g = this.base.length;
  6171.         while(_g1 < _g) {
  6172.             var i = _g1++;
  6173.             tbl[this.base.b[i]] = i;
  6174.         }
  6175.         this.tbl = tbl;
  6176.     }
  6177.     ,encodeBytes: function(b) {
  6178.         var nbits = this.nbits;
  6179.         var base = this.base;
  6180.         var size = b.length * 8 / nbits | 0;
  6181.         var out = haxe.io.Bytes.alloc(size + (b.length * 8 % nbits == 0?0:1));
  6182.         var buf = 0;
  6183.         var curbits = 0;
  6184.         var mask = (1 << nbits) - 1;
  6185.         var pin = 0;
  6186.         var pout = 0;
  6187.         while(pout < size) {
  6188.             while(curbits < nbits) {
  6189.                 curbits += 8;
  6190.                 buf <<= 8;
  6191.                 buf |= b.b[pin++];
  6192.             }
  6193.             curbits -= nbits;
  6194.             out.b[pout++] = base.b[buf >> curbits & mask] & 255;
  6195.         }
  6196.         if(curbits > 0) out.b[pout++] = base.b[buf << nbits - curbits & mask] & 255;
  6197.         return out;
  6198.     }
  6199.     ,__class__: haxe.BaseCode
  6200. }
  6201. haxe.Http = function(url) {
  6202.     this.url = url;
  6203.     this.headers = new Hash();
  6204.     this.params = new Hash();
  6205.     this.async = true;
  6206. };
  6207. haxe.Http.__name__ = true;
  6208. haxe.Http.requestUrl = function(url) {
  6209.     var h = new haxe.Http(url);
  6210.     h.async = false;
  6211.     var r = null;
  6212.     h.onData = function(d) {
  6213.         r = d;
  6214.     };
  6215.     h.onError = function(e) {
  6216.         throw e;
  6217.     };
  6218.     h.request(false);
  6219.     return r;
  6220. }
  6221. haxe.Http.prototype = {
  6222.     onStatus: function(status) {
  6223.     }
  6224.     ,onError: function(msg) {
  6225.     }
  6226.     ,onData: function(data) {
  6227.     }
  6228.     ,request: function(post) {
  6229.         var me = this;
  6230.         var r = new js.XMLHttpRequest();
  6231.         var onreadystatechange = function() {
  6232.             if(r.readyState != 4) return;
  6233.             var s = (function($this) {
  6234.                 var $r;
  6235.                 try {
  6236.                     $r = r.status;
  6237.                 } catch( e ) {
  6238.                     $r = null;
  6239.                 }
  6240.                 return $r;
  6241.             }(this));
  6242.             if(s == undefined) s = null;
  6243.             if(s != null) me.onStatus(s);
  6244.             if(s != null && s >= 200 && s < 400) me.onData(r.responseText); else switch(s) {
  6245.             case null: case undefined:
  6246.                 me.onError("Failed to connect or resolve host");
  6247.                 break;
  6248.             case 12029:
  6249.                 me.onError("Failed to connect to host");
  6250.                 break;
  6251.             case 12007:
  6252.                 me.onError("Unknown host");
  6253.                 break;
  6254.             default:
  6255.                 me.onError("Http Error #" + r.status);
  6256.             }
  6257.         };
  6258.         if(this.async) r.onreadystatechange = onreadystatechange;
  6259.         var uri = this.postData;
  6260.         if(uri != null) post = true; else {
  6261.             var $it0 = this.params.keys();
  6262.             while( $it0.hasNext() ) {
  6263.                 var p = $it0.next();
  6264.                 if(uri == null) uri = ""; else uri += "&";
  6265.                 uri += StringTools.urlEncode(p) + "=" + StringTools.urlEncode(this.params.get(p));
  6266.             }
  6267.         }
  6268.         try {
  6269.             if(post) r.open("POST",this.url,this.async); else if(uri != null) {
  6270.                 var question = this.url.split("?").length <= 1;
  6271.                 r.open("GET",this.url + (question?"?":"&") + uri,this.async);
  6272.                 uri = null;
  6273.             } else r.open("GET",this.url,this.async);
  6274.         } catch( e ) {
  6275.             this.onError(e.toString());
  6276.             return;
  6277.         }
  6278.         if(this.headers.get("Content-Type") == null && post && this.postData == null) r.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  6279.         var $it1 = this.headers.keys();
  6280.         while( $it1.hasNext() ) {
  6281.             var h = $it1.next();
  6282.             r.setRequestHeader(h,this.headers.get(h));
  6283.         }
  6284.         r.send(uri);
  6285.         if(!this.async) onreadystatechange();
  6286.     }
  6287.     ,setPostData: function(data) {
  6288.         this.postData = data;
  6289.     }
  6290.     ,setParameter: function(param,value) {
  6291.         this.params.set(param,value);
  6292.     }
  6293.     ,setHeader: function(header,value) {
  6294.         this.headers.set(header,value);
  6295.     }
  6296.     ,__class__: haxe.Http
  6297. }
  6298. haxe.Log = function() { }
  6299. haxe.Log.__name__ = true;
  6300. haxe.Log.trace = function(v,infos) {
  6301.     js.Boot.__trace(v,infos);
  6302. }
  6303. haxe.Log.clear = function() {
  6304.     js.Boot.__clear_trace();
  6305. }
  6306. if(!haxe.io) haxe.io = {}
  6307. haxe.io.Bytes = function(length,b) {
  6308.     this.length = length;
  6309.     this.b = b;
  6310. };
  6311. haxe.io.Bytes.__name__ = true;
  6312. haxe.io.Bytes.alloc = function(length) {
  6313.     var a = new Array();
  6314.     var _g = 0;
  6315.     while(_g < length) {
  6316.         var i = _g++;
  6317.         a.push(0);
  6318.     }
  6319.     return new haxe.io.Bytes(length,a);
  6320. }
  6321. haxe.io.Bytes.ofString = function(s) {
  6322.     var a = new Array();
  6323.     var _g1 = 0, _g = s.length;
  6324.     while(_g1 < _g) {
  6325.         var i = _g1++;
  6326.         var c = s.charCodeAt(i);
  6327.         if(c <= 127) a.push(c); else if(c <= 2047) {
  6328.             a.push(192 | c >> 6);
  6329.             a.push(128 | c & 63);
  6330.         } else if(c <= 65535) {
  6331.             a.push(224 | c >> 12);
  6332.             a.push(128 | c >> 6 & 63);
  6333.             a.push(128 | c & 63);
  6334.         } else {
  6335.             a.push(240 | c >> 18);
  6336.             a.push(128 | c >> 12 & 63);
  6337.             a.push(128 | c >> 6 & 63);
  6338.             a.push(128 | c & 63);
  6339.         }
  6340.     }
  6341.     return new haxe.io.Bytes(a.length,a);
  6342. }
  6343. haxe.io.Bytes.ofData = function(b) {
  6344.     return new haxe.io.Bytes(b.length,b);
  6345. }
  6346. haxe.io.Bytes.prototype = {
  6347.     getData: function() {
  6348.         return this.b;
  6349.     }
  6350.     ,toHex: function() {
  6351.         var s = new StringBuf();
  6352.         var chars = [];
  6353.         var str = "0123456789abcdef";
  6354.         var _g1 = 0, _g = str.length;
  6355.         while(_g1 < _g) {
  6356.             var i = _g1++;
  6357.             chars.push(HxOverrides.cca(str,i));
  6358.         }
  6359.         var _g1 = 0, _g = this.length;
  6360.         while(_g1 < _g) {
  6361.             var i = _g1++;
  6362.             var c = this.b[i];
  6363.             s.b += String.fromCharCode(chars[c >> 4]);
  6364.             s.b += String.fromCharCode(chars[c & 15]);
  6365.         }
  6366.         return s.b;
  6367.     }
  6368.     ,toString: function() {
  6369.         return this.readString(0,this.length);
  6370.     }
  6371.     ,readString: function(pos,len) {
  6372.         if(pos < 0 || len < 0 || pos + len > this.length) throw haxe.io.Error.OutsideBounds;
  6373.         var s = "";
  6374.         var b = this.b;
  6375.         var fcc = String.fromCharCode;
  6376.         var i = pos;
  6377.         var max = pos + len;
  6378.         while(i < max) {
  6379.             var c = b[i++];
  6380.             if(c < 128) {
  6381.                 if(c == 0) break;
  6382.                 s += fcc(c);
  6383.             } else if(c < 224) s += fcc((c & 63) << 6 | b[i++] & 127); else if(c < 240) {
  6384.                 var c2 = b[i++];
  6385.                 s += fcc((c & 31) << 12 | (c2 & 127) << 6 | b[i++] & 127);
  6386.             } else {
  6387.                 var c2 = b[i++];
  6388.                 var c3 = b[i++];
  6389.                 s += fcc((c & 15) << 18 | (c2 & 127) << 12 | c3 << 6 & 127 | b[i++] & 127);
  6390.             }
  6391.         }
  6392.         return s;
  6393.     }
  6394.     ,compare: function(other) {
  6395.         var b1 = this.b;
  6396.         var b2 = other.b;
  6397.         var len = this.length < other.length?this.length:other.length;
  6398.         var _g = 0;
  6399.         while(_g < len) {
  6400.             var i = _g++;
  6401.             if(b1[i] != b2[i]) return b1[i] - b2[i];
  6402.         }
  6403.         return this.length - other.length;
  6404.     }
  6405.     ,sub: function(pos,len) {
  6406.         if(pos < 0 || len < 0 || pos + len > this.length) throw haxe.io.Error.OutsideBounds;
  6407.         return new haxe.io.Bytes(len,this.b.slice(pos,pos + len));
  6408.     }
  6409.     ,blit: function(pos,src,srcpos,len) {
  6410.         if(pos < 0 || srcpos < 0 || len < 0 || pos + len > this.length || srcpos + len > src.length) throw haxe.io.Error.OutsideBounds;
  6411.         var b1 = this.b;
  6412.         var b2 = src.b;
  6413.         if(b1 == b2 && pos > srcpos) {
  6414.             var i = len;
  6415.             while(i > 0) {
  6416.                 i--;
  6417.                 b1[i + pos] = b2[i + srcpos];
  6418.             }
  6419.             return;
  6420.         }
  6421.         var _g = 0;
  6422.         while(_g < len) {
  6423.             var i = _g++;
  6424.             b1[i + pos] = b2[i + srcpos];
  6425.         }
  6426.     }
  6427.     ,set: function(pos,v) {
  6428.         this.b[pos] = v & 255;
  6429.     }
  6430.     ,get: function(pos) {
  6431.         return this.b[pos];
  6432.     }
  6433.     ,__class__: haxe.io.Bytes
  6434. }
  6435. haxe.io.Error = { __ename__ : true, __constructs__ : ["Blocked","Overflow","OutsideBounds","Custom"] }
  6436. haxe.io.Error.Blocked = ["Blocked",0];
  6437. haxe.io.Error.Blocked.toString = $estr;
  6438. haxe.io.Error.Blocked.__enum__ = haxe.io.Error;
  6439. haxe.io.Error.Overflow = ["Overflow",1];
  6440. haxe.io.Error.Overflow.toString = $estr;
  6441. haxe.io.Error.Overflow.__enum__ = haxe.io.Error;
  6442. haxe.io.Error.OutsideBounds = ["OutsideBounds",2];
  6443. haxe.io.Error.OutsideBounds.toString = $estr;
  6444. haxe.io.Error.OutsideBounds.__enum__ = haxe.io.Error;
  6445. haxe.io.Error.Custom = function(e) { var $x = ["Custom",3,e]; $x.__enum__ = haxe.io.Error; $x.toString = $estr; return $x; }
  6446. if(!haxe.web) haxe.web = {}
  6447. haxe.web.Request = function() { }
  6448. haxe.web.Request.__name__ = true;
  6449. haxe.web.Request.getParams = function() {
  6450.     var get = window.location.search.substr(1);
  6451.     var params = new Hash();
  6452.     var _g = 0, _g1 = new EReg("[&;]","g").split(get);
  6453.     while(_g < _g1.length) {
  6454.         var p = _g1[_g];
  6455.         ++_g;
  6456.         var pl = p.split("=");
  6457.         if(pl.length < 2) continue;
  6458.         var name = pl.shift();
  6459.         params.set(StringTools.urlDecode(name),StringTools.urlDecode(pl.join("=")));
  6460.     }
  6461.     return params;
  6462. }
  6463. haxe.web.Request.getHostName = function() {
  6464.     return window.location.host;
  6465. }
  6466. haxe.web.Request.getURI = function() {
  6467.     return window.location.pathname;
  6468. }
  6469. if(!haxe.xml) haxe.xml = {}
  6470. if(!haxe.xml._Fast) haxe.xml._Fast = {}
  6471. haxe.xml._Fast.NodeAccess = function(x) {
  6472.     this.__x = x;
  6473. };
  6474. haxe.xml._Fast.NodeAccess.__name__ = true;
  6475. haxe.xml._Fast.NodeAccess.prototype = {
  6476.     resolve: function(name) {
  6477.         var x = this.__x.elementsNamed(name).next();
  6478.         if(x == null) {
  6479.             var xname = this.__x.nodeType == Xml.Document?"Document":this.__x.getNodeName();
  6480.             throw xname + " is missing element " + name;
  6481.         }
  6482.         return new haxe.xml.Fast(x);
  6483.     }
  6484.     ,__class__: haxe.xml._Fast.NodeAccess
  6485. }
  6486. haxe.xml._Fast.AttribAccess = function(x) {
  6487.     this.__x = x;
  6488. };
  6489. haxe.xml._Fast.AttribAccess.__name__ = true;
  6490. haxe.xml._Fast.AttribAccess.prototype = {
  6491.     resolve: function(name) {
  6492.         if(this.__x.nodeType == Xml.Document) throw "Cannot access document attribute " + name;
  6493.         var v = this.__x.get(name);
  6494.         if(v == null) throw this.__x.getNodeName() + " is missing attribute " + name;
  6495.         return v;
  6496.     }
  6497.     ,__class__: haxe.xml._Fast.AttribAccess
  6498. }
  6499. haxe.xml._Fast.HasAttribAccess = function(x) {
  6500.     this.__x = x;
  6501. };
  6502. haxe.xml._Fast.HasAttribAccess.__name__ = true;
  6503. haxe.xml._Fast.HasAttribAccess.prototype = {
  6504.     resolve: function(name) {
  6505.         if(this.__x.nodeType == Xml.Document) throw "Cannot access document attribute " + name;
  6506.         return this.__x.exists(name);
  6507.     }
  6508.     ,__class__: haxe.xml._Fast.HasAttribAccess
  6509. }
  6510. haxe.xml._Fast.HasNodeAccess = function(x) {
  6511.     this.__x = x;
  6512. };
  6513. haxe.xml._Fast.HasNodeAccess.__name__ = true;
  6514. haxe.xml._Fast.HasNodeAccess.prototype = {
  6515.     resolve: function(name) {
  6516.         return this.__x.elementsNamed(name).hasNext();
  6517.     }
  6518.     ,__class__: haxe.xml._Fast.HasNodeAccess
  6519. }
  6520. haxe.xml._Fast.NodeListAccess = function(x) {
  6521.     this.__x = x;
  6522. };
  6523. haxe.xml._Fast.NodeListAccess.__name__ = true;
  6524. haxe.xml._Fast.NodeListAccess.prototype = {
  6525.     resolve: function(name) {
  6526.         var l = new List();
  6527.         var $it0 = this.__x.elementsNamed(name);
  6528.         while( $it0.hasNext() ) {
  6529.             var x = $it0.next();
  6530.             l.add(new haxe.xml.Fast(x));
  6531.         }
  6532.         return l;
  6533.     }
  6534.     ,__class__: haxe.xml._Fast.NodeListAccess
  6535. }
  6536. haxe.xml.Fast = function(x) {
  6537.     if(x.nodeType != Xml.Document && x.nodeType != Xml.Element) throw "Invalid nodeType " + Std.string(x.nodeType);
  6538.     this.x = x;
  6539.     this.node = new haxe.xml._Fast.NodeAccess(x);
  6540.     this.nodes = new haxe.xml._Fast.NodeListAccess(x);
  6541.     this.att = new haxe.xml._Fast.AttribAccess(x);
  6542.     this.has = new haxe.xml._Fast.HasAttribAccess(x);
  6543.     this.hasNode = new haxe.xml._Fast.HasNodeAccess(x);
  6544. };
  6545. haxe.xml.Fast.__name__ = true;
  6546. haxe.xml.Fast.prototype = {
  6547.     getElements: function() {
  6548.         var it = this.x.elements();
  6549.         return { hasNext : $bind(it,it.hasNext), next : function() {
  6550.             var x = it.next();
  6551.             if(x == null) return null;
  6552.             return new haxe.xml.Fast(x);
  6553.         }};
  6554.     }
  6555.     ,getInnerHTML: function() {
  6556.         var s = new StringBuf();
  6557.         var $it0 = this.x.iterator();
  6558.         while( $it0.hasNext() ) {
  6559.             var x = $it0.next();
  6560.             s.b += Std.string(x.toString());
  6561.         }
  6562.         return s.b;
  6563.     }
  6564.     ,getInnerData: function() {
  6565.         var it = this.x.iterator();
  6566.         if(!it.hasNext()) throw this.getName() + " does not have data";
  6567.         var v = it.next();
  6568.         var n = it.next();
  6569.         if(n != null) {
  6570.             if(v.nodeType == Xml.PCData && n.nodeType == Xml.CData && StringTools.trim(v.getNodeValue()) == "") {
  6571.                 var n2 = it.next();
  6572.                 if(n2 == null || n2.nodeType == Xml.PCData && StringTools.trim(n2.getNodeValue()) == "" && it.next() == null) return n.getNodeValue();
  6573.             }
  6574.             throw this.getName() + " does not only have data";
  6575.         }
  6576.         if(v.nodeType != Xml.PCData && v.nodeType != Xml.CData) throw this.getName() + " does not have data";
  6577.         return v.getNodeValue();
  6578.     }
  6579.     ,getName: function() {
  6580.         return this.x.nodeType == Xml.Document?"Document":this.x.getNodeName();
  6581.     }
  6582.     ,__class__: haxe.xml.Fast
  6583. }
  6584. haxe.xml.Parser = function() { }
  6585. haxe.xml.Parser.__name__ = true;
  6586. haxe.xml.Parser.parse = function(str) {
  6587.     var doc = Xml.createDocument();
  6588.     haxe.xml.Parser.doParse(str,0,doc);
  6589.     return doc;
  6590. }
  6591. haxe.xml.Parser.doParse = function(str,p,parent) {
  6592.     if(p == null) p = 0;
  6593.     var xml = null;
  6594.     var state = 1;
  6595.     var next = 1;
  6596.     var aname = null;
  6597.     var start = 0;
  6598.     var nsubs = 0;
  6599.     var nbrackets = 0;
  6600.     var c = str.charCodeAt(p);
  6601.     while(!(c != c)) {
  6602.         switch(state) {
  6603.         case 0:
  6604.             switch(c) {
  6605.             case 10:case 13:case 9:case 32:
  6606.                 break;
  6607.             default:
  6608.                 state = next;
  6609.                 continue;
  6610.             }
  6611.             break;
  6612.         case 1:
  6613.             switch(c) {
  6614.             case 60:
  6615.                 state = 0;
  6616.                 next = 2;
  6617.                 break;
  6618.             default:
  6619.                 start = p;
  6620.                 state = 13;
  6621.                 continue;
  6622.             }
  6623.             break;
  6624.         case 13:
  6625.             if(c == 60) {
  6626.                 var child = Xml.createPCData(HxOverrides.substr(str,start,p - start));
  6627.                 parent.addChild(child);
  6628.                 nsubs++;
  6629.                 state = 0;
  6630.                 next = 2;
  6631.             }
  6632.             break;
  6633.         case 17:
  6634.             if(c == 93 && str.charCodeAt(p + 1) == 93 && str.charCodeAt(p + 2) == 62) {
  6635.                 var child = Xml.createCData(HxOverrides.substr(str,start,p - start));
  6636.                 parent.addChild(child);
  6637.                 nsubs++;
  6638.                 p += 2;
  6639.                 state = 1;
  6640.             }
  6641.             break;
  6642.         case 2:
  6643.             switch(c) {
  6644.             case 33:
  6645.                 if(str.charCodeAt(p + 1) == 91) {
  6646.                     p += 2;
  6647.                     if(HxOverrides.substr(str,p,6).toUpperCase() != "CDATA[") throw "Expected <![CDATA[";
  6648.                     p += 5;
  6649.                     state = 17;
  6650.                     start = p + 1;
  6651.                 } else if(str.charCodeAt(p + 1) == 68 || str.charCodeAt(p + 1) == 100) {
  6652.                     if(HxOverrides.substr(str,p + 2,6).toUpperCase() != "OCTYPE") throw "Expected <!DOCTYPE";
  6653.                     p += 8;
  6654.                     state = 16;
  6655.                     start = p + 1;
  6656.                 } else if(str.charCodeAt(p + 1) != 45 || str.charCodeAt(p + 2) != 45) throw "Expected <!--"; else {
  6657.                     p += 2;
  6658.                     state = 15;
  6659.                     start = p + 1;
  6660.                 }
  6661.                 break;
  6662.             case 63:
  6663.                 state = 14;
  6664.                 start = p;
  6665.                 break;
  6666.             case 47:
  6667.                 if(parent == null) throw "Expected node name";
  6668.                 start = p + 1;
  6669.                 state = 0;
  6670.                 next = 10;
  6671.                 break;
  6672.             default:
  6673.                 state = 3;
  6674.                 start = p;
  6675.                 continue;
  6676.             }
  6677.             break;
  6678.         case 3:
  6679.             if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
  6680.                 if(p == start) throw "Expected node name";
  6681.                 xml = Xml.createElement(HxOverrides.substr(str,start,p - start));
  6682.                 parent.addChild(xml);
  6683.                 state = 0;
  6684.                 next = 4;
  6685.                 continue;
  6686.             }
  6687.             break;
  6688.         case 4:
  6689.             switch(c) {
  6690.             case 47:
  6691.                 state = 11;
  6692.                 nsubs++;
  6693.                 break;
  6694.             case 62:
  6695.                 state = 9;
  6696.                 nsubs++;
  6697.                 break;
  6698.             default:
  6699.                 state = 5;
  6700.                 start = p;
  6701.                 continue;
  6702.             }
  6703.             break;
  6704.         case 5:
  6705.             if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
  6706.                 var tmp;
  6707.                 if(start == p) throw "Expected attribute name";
  6708.                 tmp = HxOverrides.substr(str,start,p - start);
  6709.                 aname = tmp;
  6710.                 if(xml.exists(aname)) throw "Duplicate attribute";
  6711.                 state = 0;
  6712.                 next = 6;
  6713.                 continue;
  6714.             }
  6715.             break;
  6716.         case 6:
  6717.             switch(c) {
  6718.             case 61:
  6719.                 state = 0;
  6720.                 next = 7;
  6721.                 break;
  6722.             default:
  6723.                 throw "Expected =";
  6724.             }
  6725.             break;
  6726.         case 7:
  6727.             switch(c) {
  6728.             case 34:case 39:
  6729.                 state = 8;
  6730.                 start = p;
  6731.                 break;
  6732.             default:
  6733.                 throw "Expected \"";
  6734.             }
  6735.             break;
  6736.         case 8:
  6737.             if(c == str.charCodeAt(start)) {
  6738.                 var val = HxOverrides.substr(str,start + 1,p - start - 1);
  6739.                 xml.set(aname,val);
  6740.                 state = 0;
  6741.                 next = 4;
  6742.             }
  6743.             break;
  6744.         case 9:
  6745.             p = haxe.xml.Parser.doParse(str,p,xml);
  6746.             start = p;
  6747.             state = 1;
  6748.             break;
  6749.         case 11:
  6750.             switch(c) {
  6751.             case 62:
  6752.                 state = 1;
  6753.                 break;
  6754.             default:
  6755.                 throw "Expected >";
  6756.             }
  6757.             break;
  6758.         case 12:
  6759.             switch(c) {
  6760.             case 62:
  6761.                 if(nsubs == 0) parent.addChild(Xml.createPCData(""));
  6762.                 return p;
  6763.             default:
  6764.                 throw "Expected >";
  6765.             }
  6766.             break;
  6767.         case 10:
  6768.             if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
  6769.                 if(start == p) throw "Expected node name";
  6770.                 var v = HxOverrides.substr(str,start,p - start);
  6771.                 if(v != parent.getNodeName()) throw "Expected </" + parent.getNodeName() + ">";
  6772.                 state = 0;
  6773.                 next = 12;
  6774.                 continue;
  6775.             }
  6776.             break;
  6777.         case 15:
  6778.             if(c == 45 && str.charCodeAt(p + 1) == 45 && str.charCodeAt(p + 2) == 62) {
  6779.                 parent.addChild(Xml.createComment(HxOverrides.substr(str,start,p - start)));
  6780.                 p += 2;
  6781.                 state = 1;
  6782.             }
  6783.             break;
  6784.         case 16:
  6785.             if(c == 91) nbrackets++; else if(c == 93) nbrackets--; else if(c == 62 && nbrackets == 0) {
  6786.                 parent.addChild(Xml.createDocType(HxOverrides.substr(str,start,p - start)));
  6787.                 state = 1;
  6788.             }
  6789.             break;
  6790.         case 14:
  6791.             if(c == 63 && str.charCodeAt(p + 1) == 62) {
  6792.                 p++;
  6793.                 var str1 = HxOverrides.substr(str,start + 1,p - start - 2);
  6794.                 parent.addChild(Xml.createProlog(str1));
  6795.                 state = 1;
  6796.             }
  6797.             break;
  6798.         }
  6799.         c = str.charCodeAt(++p);
  6800.     }
  6801.     if(state == 1) {
  6802.         start = p;
  6803.         state = 13;
  6804.     }
  6805.     if(state == 13) {
  6806.         if(p != start || nsubs == 0) parent.addChild(Xml.createPCData(HxOverrides.substr(str,start,p - start)));
  6807.         return p;
  6808.     }
  6809.     throw "Unexpected end";
  6810. }
  6811. haxe.xml.Parser.isValidChar = function(c) {
  6812.     return c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45;
  6813. }
  6814. var js = js || {}
  6815. js.Boot = function() { }
  6816. js.Boot.__name__ = true;
  6817. js.Boot.__unhtml = function(s) {
  6818.     return s.split("&").join("&").split("<").join("<").split(">").join(">");
  6819. }
  6820. js.Boot.__trace = function(v,i) {
  6821.     var msg = i != null?i.fileName + ":" + i.lineNumber + ": ":"";
  6822.     msg += js.Boot.__string_rec(v,"");
  6823.     var d;
  6824.     if(typeof(document) != "undefined" && (d = document.getElementById("haxe:trace")) != null) d.innerHTML += js.Boot.__unhtml(msg) + "<br/>"; else if(typeof(console) != "undefined" && console.log != null) console.log(msg);
  6825. }
  6826. js.Boot.__clear_trace = function() {
  6827.     var d = document.getElementById("haxe:trace");
  6828.     if(d != null) d.innerHTML = "";
  6829. }
  6830. js.Boot.isClass = function(o) {
  6831.     return o.__name__;
  6832. }
  6833. js.Boot.isEnum = function(e) {
  6834.     return e.__ename__;
  6835. }
  6836. js.Boot.getClass = function(o) {
  6837.     return o.__class__;
  6838. }
  6839. js.Boot.__string_rec = function(o,s) {
  6840.     if(o == null) return "null";
  6841.     if(s.length >= 5) return "<...>";
  6842.     var t = typeof(o);
  6843.     if(t == "function" && (o.__name__ || o.__ename__)) t = "object";
  6844.     switch(t) {
  6845.     case "object":
  6846.         if(o instanceof Array) {
  6847.             if(o.__enum__) {
  6848.                 if(o.length == 2) return o[0];
  6849.                 var str = o[0] + "(";
  6850.                 s += "\t";
  6851.                 var _g1 = 2, _g = o.length;
  6852.                 while(_g1 < _g) {
  6853.                     var i = _g1++;
  6854.                     if(i != 2) str += "," + js.Boot.__string_rec(o[i],s); else str += js.Boot.__string_rec(o[i],s);
  6855.                 }
  6856.                 return str + ")";
  6857.             }
  6858.             var l = o.length;
  6859.             var i;
  6860.             var str = "[";
  6861.             s += "\t";
  6862.             var _g = 0;
  6863.             while(_g < l) {
  6864.                 var i1 = _g++;
  6865.                 str += (i1 > 0?",":"") + js.Boot.__string_rec(o[i1],s);
  6866.             }
  6867.             str += "]";
  6868.             return str;
  6869.         }
  6870.         var tostr;
  6871.         try {
  6872.             tostr = o.toString;
  6873.         } catch( e ) {
  6874.             return "???";
  6875.         }
  6876.         if(tostr != null && tostr != Object.toString) {
  6877.             var s2 = o.toString();
  6878.             if(s2 != "[object Object]") return s2;
  6879.         }
  6880.         var k = null;
  6881.         var str = "{\n";
  6882.         s += "\t";
  6883.         var hasp = o.hasOwnProperty != null;
  6884.         for( var k in o ) { ;
  6885.         if(hasp && !o.hasOwnProperty(k)) {
  6886.             continue;
  6887.         }
  6888.         if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__" || k == "__properties__") {
  6889.             continue;
  6890.         }
  6891.         if(str.length != 2) str += ", \n";
  6892.         str += s + k + " : " + js.Boot.__string_rec(o[k],s);
  6893.         }
  6894.         s = s.substring(1);
  6895.         str += "\n" + s + "}";
  6896.         return str;
  6897.     case "function":
  6898.         return "<function>";
  6899.     case "string":
  6900.         return o;
  6901.     default:
  6902.         return String(o);
  6903.     }
  6904. }
  6905. js.Boot.__interfLoop = function(cc,cl) {
  6906.     if(cc == null) return false;
  6907.     if(cc == cl) return true;
  6908.     var intf = cc.__interfaces__;
  6909.     if(intf != null) {
  6910.         var _g1 = 0, _g = intf.length;
  6911.         while(_g1 < _g) {
  6912.             var i = _g1++;
  6913.             var i1 = intf[i];
  6914.             if(i1 == cl || js.Boot.__interfLoop(i1,cl)) return true;
  6915.         }
  6916.     }
  6917.     return js.Boot.__interfLoop(cc.__super__,cl);
  6918. }
  6919. js.Boot.__instanceof = function(o,cl) {
  6920.     try {
  6921.         if(o instanceof cl) {
  6922.             if(cl == Array) return o.__enum__ == null;
  6923.             return true;
  6924.         }
  6925.         if(js.Boot.__interfLoop(o.__class__,cl)) return true;
  6926.     } catch( e ) {
  6927.         if(cl == null) return false;
  6928.     }
  6929.     switch(cl) {
  6930.     case Int:
  6931.         return Math.ceil(o%2147483648.0) === o;
  6932.     case Float:
  6933.         return typeof(o) == "number";
  6934.     case Bool:
  6935.         return o === true || o === false;
  6936.     case String:
  6937.         return typeof(o) == "string";
  6938.     case Dynamic:
  6939.         return true;
  6940.     default:
  6941.         if(o == null) return false;
  6942.         if(cl == Class && o.__name__ != null) return true; else null;
  6943.         if(cl == Enum && o.__ename__ != null) return true; else null;
  6944.         return o.__enum__ == cl;
  6945.     }
  6946. }
  6947. js.Boot.__cast = function(o,t) {
  6948.     if(js.Boot.__instanceof(o,t)) return o; else throw "Cannot cast " + Std.string(o) + " to " + Std.string(t);
  6949. }
  6950. js.Lib = function() { }
  6951. js.Lib.__name__ = true;
  6952. js.Lib.debug = function() {
  6953.     debugger;
  6954. }
  6955. js.Lib.alert = function(v) {
  6956.     alert(js.Boot.__string_rec(v,""));
  6957. }
  6958. js.Lib.eval = function(code) {
  6959.     return eval(code);
  6960. }
  6961. js.Lib.setErrorHandler = function(f) {
  6962.     js.Lib.onerror = f;
  6963. }
  6964. var orc = orc || {}
  6965. if(!orc.utils) orc.utils = {}
  6966. orc.utils.DrawHelper = function() { }
  6967. orc.utils.DrawHelper.__name__ = true;
  6968. orc.utils.DrawHelper.createFillStyle = function(cssStyleColor,alpha) {
  6969.     cssStyleColor = StringTools.replace(cssStyleColor,"0x","");
  6970.     cssStyleColor = StringTools.replace(cssStyleColor,"0X","");
  6971.     cssStyleColor = StringTools.replace(cssStyleColor,"#","");
  6972.     if(cssStyleColor.length == 6) {
  6973.         var r = Std.string(Std.parseInt("0x" + HxOverrides.substr(cssStyleColor,0,2)));
  6974.         var g = Std.string(Std.parseInt("0x" + HxOverrides.substr(cssStyleColor,2,2)));
  6975.         var b = Std.string(Std.parseInt("0x" + HxOverrides.substr(cssStyleColor,4,2)));
  6976.         return "rgba(" + r + "," + g + "," + b + "," + Std.string(alpha) + ")";
  6977.     }
  6978.     return "";
  6979. }
  6980. orc.utils.ImageMetricHelper = function(imgWidth,imgHeight) {
  6981.     this.width = imgWidth;
  6982.     this.height = imgHeight;
  6983.     this.diagonalLineTheta = Math.atan2(this.width,this.height);
  6984.     this.diagonalLineLength = Math.sqrt(this.width * this.width + this.height * this.height);
  6985. };
  6986. orc.utils.ImageMetricHelper.__name__ = true;
  6987. orc.utils.ImageMetricHelper.prototype = {
  6988.     getMaxFitScale: function(width,height,rotation) {
  6989.         if(rotation == null) rotation = 0;
  6990.         var scaleX;
  6991.         var scaleY;
  6992.         if(rotation == 0 || rotation == 180) {
  6993.             scaleX = width / this.width;
  6994.             scaleY = height / this.height;
  6995.         } else {
  6996.             var r = Math.PI * rotation / 180;
  6997.             var t0 = this.diagonalLineTheta + r;
  6998.             var w0 = Math.abs(this.diagonalLineLength * Math.sin(t0));
  6999.             var h0 = Math.abs(this.diagonalLineLength * Math.cos(t0));
  7000.             var t1 = -this.diagonalLineTheta + r;
  7001.             var w1 = Math.abs(this.diagonalLineLength * Math.sin(t1));
  7002.             var h1 = Math.abs(this.diagonalLineLength * Math.cos(t1));
  7003.             var w = Math.max(w0,w1);
  7004.             var h = Math.max(h0,h1);
  7005.             scaleX = width / w;
  7006.             scaleY = height / h;
  7007.         }
  7008.         return Math.min(scaleX,scaleY);
  7009.     }
  7010.     ,__class__: orc.utils.ImageMetricHelper
  7011. }
  7012. orc.utils.UrlParam = function() {
  7013. };
  7014. orc.utils.UrlParam.__name__ = true;
  7015. orc.utils.UrlParam.prototype = {
  7016.     __class__: orc.utils.UrlParam
  7017. }
  7018. orc.utils.Util = function() { }
  7019. orc.utils.Util.__name__ = true;
  7020. orc.utils.Util.request = function(url,call,onError) {
  7021.     var http = new haxe.Http(url);
  7022.     http.onData = call;
  7023.     http.onError = function(e) {
  7024.         if(onError != null) onError();
  7025.     };
  7026.     http.request(false);
  7027. }
  7028. orc.utils.Util.getUrlParam = function(key) {
  7029.     var params = orc.utils.Util.getUrlParams();
  7030.     var _g = 0;
  7031.     while(_g < params.length) {
  7032.         var param = params[_g];
  7033.         ++_g;
  7034.         var p = param;
  7035.         if(p.key == key) return p.value;
  7036.     }
  7037.     return "";
  7038. }
  7039. orc.utils.Util.getUrlParams = function() {
  7040.     var url = js.Lib.window.location.href;
  7041.     var results = new Array();
  7042.     var index = url.indexOf("?");
  7043.     if(index > 0) {
  7044.         var params = HxOverrides.substr(url,index + 1,null);
  7045.         var lines = params.split("&");
  7046.         var _g = 0;
  7047.         while(_g < lines.length) {
  7048.             var line = lines[_g];
  7049.             ++_g;
  7050.             var terms = line.split("=");
  7051.             if(terms.length == 2) {
  7052.                 var val = new orc.utils.UrlParam();
  7053.                 val.key = terms[0];
  7054.                 val.value = terms[1];
  7055.                 results.push(val);
  7056.             }
  7057.         }
  7058.     }
  7059.     return results;
  7060. }
  7061. orc.utils.Util.getXmlChilds = function(xml) {
  7062.     var i = xml.elements();
  7063.     var list = new Array();
  7064.     while(i.hasNext() == true) {
  7065.         var node = i.next();
  7066.         list.push(node);
  7067.     }
  7068.     return list;
  7069. }
  7070. orc.utils.Util.searchPos = function(txt,keyword) {
  7071.     var list = [];
  7072.     var index = -1;
  7073.     while(true) {
  7074.         var from = 0;
  7075.         if(index != -1) {
  7076.             from = index + keyword.length;
  7077.             if(from < 0) from = 0;
  7078.         }
  7079.         index = txt.indexOf(keyword,from);
  7080.         if(index > -1 && index + keyword.length <= txt.length) list.push(index); else break;
  7081.     }
  7082.     return list;
  7083. }
  7084. orc.utils.Util.createSearchResults = function(txt,keyword,posList,page) {
  7085.     var results = [];
  7086.     var maxChars = 50;
  7087.     var coloredWord = "<font color='#FF0000'>" + keyword + "</font>";
  7088.     var _g1 = 0, _g = posList.length;
  7089.     while(_g1 < _g) {
  7090.         var i = _g1++;
  7091.         var index = posList[i];
  7092.         var r = new core.SearchResult("",page);
  7093.         var offset = index;
  7094.         if(txt.length < maxChars) r.content = txt; else {
  7095.             var from = index - Math.max(0,maxChars - keyword.length) / 2 | 0;
  7096.             if(from < 0) from = 0;
  7097.             r.content = HxOverrides.substr(txt,from,maxChars);
  7098.             offset = index - from;
  7099.             if(from + maxChars < txt.length) r.content += " ...";
  7100.             if(from > 0) {
  7101.                 r.content = "... " + r.content;
  7102.                 offset += 4;
  7103.             }
  7104.         }
  7105.         r.content = HxOverrides.substr(r.content,0,offset) + "<font color='#FF0000'>" + HxOverrides.substr(r.content,offset,keyword.length) + "</font>" + HxOverrides.substr(r.content,offset + keyword.length,null);
  7106.         results.push(r);
  7107.     }
  7108.     return results;
  7109. }
  7110. var $_;
  7111. function $bind(o,m) { var f = function(){ return f.method.apply(f.scope, arguments); }; f.scope = o; f.method = m; return f; };
  7112. if(Array.prototype.indexOf) HxOverrides.remove = function(a,o) {
  7113.     var i = a.indexOf(o);
  7114.     if(i == -1) return false;
  7115.     a.splice(i,1);
  7116.     return true;
  7117. }; else null;
  7118. Math.__name__ = ["Math"];
  7119. Math.NaN = Number.NaN;
  7120. Math.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;
  7121. Math.POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
  7122. Math.isFinite = function(i) {
  7123.     return isFinite(i);
  7124. };
  7125. Math.isNaN = function(i) {
  7126.     return isNaN(i);
  7127. };
  7128. String.prototype.__class__ = String;
  7129. String.__name__ = true;
  7130. Array.prototype.__class__ = Array;
  7131. Array.__name__ = true;
  7132. Date.prototype.__class__ = Date;
  7133. Date.__name__ = ["Date"];
  7134. var Int = { __name__ : ["Int"]};
  7135. var Dynamic = { __name__ : ["Dynamic"]};
  7136. var Float = Number;
  7137. Float.__name__ = ["Float"];
  7138. var Bool = Boolean;
  7139. Bool.__ename__ = ["Bool"];
  7140. var Class = { __name__ : ["Class"]};
  7141. var Enum = { };
  7142. var Void = { __ename__ : ["Void"]};
  7143. Xml.Element = "element";
  7144. Xml.PCData = "pcdata";
  7145. Xml.CData = "cdata";
  7146. Xml.Comment = "comment";
  7147. Xml.DocType = "doctype";
  7148. Xml.Prolog = "prolog";
  7149. Xml.Document = "document";
  7150. if(typeof document != "undefined") js.Lib.document = document;
  7151. if(typeof window != "undefined") {
  7152.     js.Lib.window = window;
  7153.     js.Lib.window.onerror = function(msg,url,line) {
  7154.         var f = js.Lib.onerror;
  7155.         if(f == null) return false;
  7156.         return f(msg,[url + ":" + line]);
  7157.     };
  7158. }
  7159. js.XMLHttpRequest = window.XMLHttpRequest?XMLHttpRequest:window.ActiveXObject?function() {
  7160.     try {
  7161.         return new ActiveXObject("Msxml2.XMLHTTP");
  7162.     } catch( e ) {
  7163.         try {
  7164.             return new ActiveXObject("Microsoft.XMLHTTP");
  7165.         } catch( e1 ) {
  7166.             throw "Unable to create XMLHttpRequest object.";
  7167.         }
  7168.     }
  7169. }:(function($this) {
  7170.     var $r;
  7171.     throw "Unable to create XMLHttpRequest object.";
  7172.     return $r;
  7173. }(this));
  7174. L.instance = new Hash();
  7175. RunTime.useGoogleUaAsLogViewer = true;
  7176. RunTime.urlIndex = "html5forpc.html";
  7177. RunTime.urlZoom = "zoom.html";
  7178. RunTime.urlRoot = "";
  7179. RunTime.urlBookinfo = RunTime.urlRoot + "data/bookinfo.xml";
  7180. RunTime.urlPageInfo = RunTime.urlRoot + "data/pages.xml";
  7181. RunTime.urlHotlinks = RunTime.urlRoot + "data/hotlinks.xml";
  7182. RunTime.urlContents = RunTime.urlRoot + "data/contents.xml";
  7183. RunTime.urlSearch = RunTime.urlRoot + "data/search.xml";
  7184. RunTime.urlVideos = RunTime.urlRoot + "data/videos.xml";
  7185. RunTime.urlButtons = RunTime.urlRoot + "data/buttons.xml";
  7186. RunTime.urlAudios = RunTime.urlRoot + "data/sounds.xml";
  7187. RunTime.urlBookmarks = RunTime.urlRoot + "data/bookmarks.xml";
  7188. RunTime.urlLang = RunTime.urlRoot + "data/languages/languages.xml";
  7189. RunTime.urlSlideshow = RunTime.urlRoot + "data/slideshow.xml";
  7190. RunTime.urlShareInfo = RunTime.urlRoot + "data/share.xml";
  7191. RunTime.urlAbout = RunTime.urlRoot + "data/copyright.xml";
  7192. RunTime.searchHtmlCache = "";
  7193. RunTime.inputHtmlCache = "";
  7194. RunTime.isFullscreen = false;
  7195. RunTime.resizeTimer = new haxe.Timer(600);
  7196. RunTime.languages = new Array();
  7197. RunTime.book = new core.Book();
  7198. RunTime.singlePage = false;
  7199. RunTime.bookTop = 0;
  7200. RunTime.bookBottom = 0;
  7201. RunTime.bookLeft = 0;
  7202. RunTime.bookRight = 0;
  7203. RunTime.pcode = "";
  7204. RunTime.bottomBarAlpha = 0.6;
  7205. RunTime.bottomBarHeight = 40;
  7206. RunTime.autoflipButtonUnselectedAlpha = 0.5;
  7207. RunTime.doubleClickIntervalMs = 300;
  7208. RunTime.doubleZoomIntervalMs = 1000;
  7209. RunTime.highLights = new Array();
  7210. RunTime.notes = new Array();
  7211. RunTime.bLocked = true;
  7212. RunTime.kvPrex = "";
  7213. RunTime.key = "";
  7214. RunTime.slideshowPopupHtml = "";
  7215. Zoom.imgSrc = "";
  7216. Zoom.pageNum = "";
  7217. Zoom.bookId = "";
  7218. Zoom.analyticsUA = "";
  7219. Zoom.bookTitle = "";
  7220. Zoom.bbv = "";
  7221. Zoom.pcode = "";
  7222. Zoom.hotlinks = [];
  7223. Zoom.videos = [];
  7224. Zoom.buttons = [];
  7225. Zoom.xOffset = 0;
  7226. Zoom.yOffset = 0;
  7227. Zoom.popupXOffset = 0;
  7228. Zoom.popupYOffset = 0;
  7229. core.HtmlHelper.lv = 0;
  7230. Main.main();
  7231.